blob: 12b7629984e304f2f62c61e677f2bb175d200a6e [file] [log] [blame]
// Code generated by command: go run nat_amd64_asm.go -out ../nat_amd64.s -stubs ../nat_amd64.go -pkg bigmod. DO NOT EDIT.
//go:build amd64 && gc && !purego
// func montgomeryLoop(d []uint, a []uint, b []uint, m []uint, m0inv uint) uint
TEXT ·montgomeryLoop(SB), $8-112
MOVQ d_len+8(FP), CX
MOVQ d_base+0(FP), BX
MOVQ b_base+48(FP), SI
MOVQ m_base+72(FP), DI
MOVQ m0inv+96(FP), R8
XORQ R9, R9
XORQ R10, R10
outerLoop:
MOVQ a_base+24(FP), R11
MOVQ (R11)(R10*8), R11
MOVQ (SI), AX
MULQ R11
MOVQ AX, R13
MOVQ DX, R12
ADDQ (BX), R13
ADCQ $0x00, R12
MOVQ R8, R14
IMULQ R13, R14
BTRQ $0x3f, R14
MOVQ (DI), AX
MULQ R14
ADDQ AX, R13
ADCQ DX, R12
SHRQ $0x3f, R12, R13
XORQ R12, R12
INCQ R12
JMP innerLoopCondition
innerLoop:
MOVQ (SI)(R12*8), AX
MULQ R11
MOVQ AX, BP
MOVQ DX, R15
MOVQ (DI)(R12*8), AX
MULQ R14
ADDQ AX, BP
ADCQ DX, R15
ADDQ (BX)(R12*8), BP
ADCQ $0x00, R15
ADDQ R13, BP
ADCQ $0x00, R15
MOVQ BP, AX
BTRQ $0x3f, AX
MOVQ AX, -8(BX)(R12*8)
SHRQ $0x3f, R15, BP
MOVQ BP, R13
INCQ R12
innerLoopCondition:
CMPQ CX, R12
JGT innerLoop
ADDQ R13, R9
MOVQ R9, AX
BTRQ $0x3f, AX
MOVQ AX, -8(BX)(CX*8)
SHRQ $0x3f, R9
INCQ R10
CMPQ CX, R10
JGT outerLoop
MOVQ R9, ret+104(FP)
RET