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)
16TEXT ·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)
28TEXT ·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)
36TEXT ·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)
44TEXT ·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)
52TEXT ·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
View as plain text