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