github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/crypto/internal/bigmod/nat_amd64.s (about) 1 // Code generated by command: go run nat_amd64_asm.go -out ../nat_amd64.s -stubs ../nat_amd64.go -pkg bigmod. DO NOT EDIT. 2 3 //go:build amd64 && gc && !purego 4 5 // func montgomeryLoop(d []uint, a []uint, b []uint, m []uint, m0inv uint) uint 6 TEXT ·montgomeryLoop(SB), $8-112 7 MOVQ d_len+8(FP), CX 8 MOVQ d_base+0(FP), BX 9 MOVQ b_base+48(FP), SI 10 MOVQ m_base+72(FP), DI 11 MOVQ m0inv+96(FP), R8 12 XORQ R9, R9 13 XORQ R10, R10 14 15 outerLoop: 16 MOVQ a_base+24(FP), R11 17 MOVQ (R11)(R10*8), R11 18 MOVQ (SI), AX 19 MULQ R11 20 MOVQ AX, R13 21 MOVQ DX, R12 22 ADDQ (BX), R13 23 ADCQ $0x00, R12 24 MOVQ R8, R14 25 IMULQ R13, R14 26 BTRQ $0x3f, R14 27 MOVQ (DI), AX 28 MULQ R14 29 ADDQ AX, R13 30 ADCQ DX, R12 31 SHRQ $0x3f, R12, R13 32 XORQ R12, R12 33 INCQ R12 34 JMP innerLoopCondition 35 36 innerLoop: 37 MOVQ (SI)(R12*8), AX 38 MULQ R11 39 MOVQ AX, BP 40 MOVQ DX, R15 41 MOVQ (DI)(R12*8), AX 42 MULQ R14 43 ADDQ AX, BP 44 ADCQ DX, R15 45 ADDQ (BX)(R12*8), BP 46 ADCQ $0x00, R15 47 ADDQ R13, BP 48 ADCQ $0x00, R15 49 MOVQ BP, AX 50 BTRQ $0x3f, AX 51 MOVQ AX, -8(BX)(R12*8) 52 SHRQ $0x3f, R15, BP 53 MOVQ BP, R13 54 INCQ R12 55 56 innerLoopCondition: 57 CMPQ CX, R12 58 JGT innerLoop 59 ADDQ R13, R9 60 MOVQ R9, AX 61 BTRQ $0x3f, AX 62 MOVQ AX, -8(BX)(CX*8) 63 SHRQ $0x3f, R9 64 INCQ R10 65 CMPQ CX, R10 66 JGT outerLoop 67 MOVQ R9, ret+104(FP) 68 RET