github.com/cloudflare/circl@v1.5.0/ecc/fourq/fq_amd64.s (about)

     1  // +build amd64,!purego
     2  
     3  #include "fq_amd64.h"
     4  
     5  #define fqMulLegacy \
     6      _fqMulLeg(0(DI),0(SI),0(BX))
     7  #define fqMulBmi2 \
     8      _fqMulBmi2(0(DI),0(SI),0(BX))
     9  
    10  #define fqSqrLegacy \
    11      _fqSqrLeg(0(DI),0(SI))
    12  #define fqSqrBmi2 \
    13      _fqSqrBmi2(0(DI),0(SI))
    14  
    15  // func fqCmov(c, a *fq, b int)
    16  TEXT ·fqCmov(SB),0,$0-24
    17      MOVQ c+0(FP), DI
    18      MOVQ a+8(FP), SI
    19      MOVQ b+16(FP), BX
    20      TESTQ BX, BX
    21      MOVQ  0(DI), AX; MOVQ  0(SI), DX; CMOVQNE DX, AX; MOVQ AX,  0(DI);
    22      MOVQ  8(DI), AX; MOVQ  8(SI), DX; CMOVQNE DX, AX; MOVQ AX,  8(DI);
    23      MOVQ 16(DI), AX; MOVQ 16(SI), DX; CMOVQNE DX, AX; MOVQ AX, 16(DI);
    24      MOVQ 24(DI), AX; MOVQ 24(SI), DX; CMOVQNE DX, AX; MOVQ AX, 24(DI);
    25      RET
    26  
    27  // func fqAdd(c, a, b *fq)
    28  TEXT ·fqAdd(SB),0,$0-24
    29      MOVQ c+0(FP), DI
    30      MOVQ a+8(FP), SI
    31      MOVQ b+16(FP), BX
    32      _fqAdd(0(DI), 0(SI), 0(BX))
    33      RET
    34  
    35  // func fqSub(c, a, b *fq)
    36  TEXT ·fqSub(SB),0,$0-24
    37      MOVQ c+0(FP), DI
    38      MOVQ a+8(FP), SI
    39      MOVQ b+16(FP), BX
    40      _fqSub(0(DI), 0(SI), 0(BX))
    41      RET
    42  
    43  // func fqMul(c, a, b *fq)
    44  TEXT ·fqMul(SB),0,$0-24
    45      MOVQ c+0(FP), DI
    46      MOVQ a+8(FP), SI
    47      MOVQ b+16(FP), BX
    48      CHECK_BMI2(LFQMUL, fqMulLegacy, fqMulBmi2)
    49      RET
    50  
    51  // func fqSqr(c, a *fq)
    52  TEXT ·fqSqr(SB),0,$0-16
    53      MOVQ c+0(FP), DI
    54      MOVQ a+8(FP), SI
    55      CHECK_BMI2(LFQSQR, fqSqrLegacy, fqSqrBmi2)
    56      RET