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