1// +build amd64
2
3#include "textflag.h"
4#include "fp_amd64.h"
5
6// func cmovAmd64(x, y *Elt, n uint)
7TEXT ·cmovAmd64(SB),NOSPLIT,$0-24
8 MOVQ x+0(FP), DI
9 MOVQ y+8(FP), SI
10 MOVQ n+16(FP), BX
11 cselect(0(DI),0(SI),BX)
12 RET
13
14// func cswapAmd64(x, y *Elt, n uint)
15TEXT ·cswapAmd64(SB),NOSPLIT,$0-24
16 MOVQ x+0(FP), DI
17 MOVQ y+8(FP), SI
18 MOVQ n+16(FP), BX
19 cswap(0(DI),0(SI),BX)
20 RET
21
22// func subAmd64(z, x, y *Elt)
23TEXT ·subAmd64(SB),NOSPLIT,$0-24
24 MOVQ z+0(FP), DI
25 MOVQ x+8(FP), SI
26 MOVQ y+16(FP), BX
27 subtraction(0(DI),0(SI),0(BX))
28 RET
29
30// func addsubAmd64(x, y *Elt)
31TEXT ·addsubAmd64(SB),NOSPLIT,$0-16
32 MOVQ x+0(FP), DI
33 MOVQ y+8(FP), SI
34 addSub(0(DI),0(SI))
35 RET
36
37#define addLegacy \
38 additionLeg(0(DI),0(SI),0(BX))
39#define addBmi2Adx \
40 additionAdx(0(DI),0(SI),0(BX))
41
42#define mulLegacy \
43 integerMulLeg(0(SP),0(SI),0(BX)) \
44 reduceFromDoubleLeg(0(DI),0(SP))
45#define mulBmi2Adx \
46 integerMulAdx(0(SP),0(SI),0(BX)) \
47 reduceFromDoubleAdx(0(DI),0(SP))
48
49#define sqrLegacy \
50 integerSqrLeg(0(SP),0(SI)) \
51 reduceFromDoubleLeg(0(DI),0(SP))
52#define sqrBmi2Adx \
53 integerSqrAdx(0(SP),0(SI)) \
54 reduceFromDoubleAdx(0(DI),0(SP))
55
56// func addAmd64(z, x, y *Elt)
57TEXT ·addAmd64(SB),NOSPLIT,$0-24
58 MOVQ z+0(FP), DI
59 MOVQ x+8(FP), SI
60 MOVQ y+16(FP), BX
61 CHECK_BMI2ADX(LADD, addLegacy, addBmi2Adx)
62
63// func mulAmd64(z, x, y *Elt)
64TEXT ·mulAmd64(SB),NOSPLIT,$112-24
65 MOVQ z+0(FP), DI
66 MOVQ x+8(FP), SI
67 MOVQ y+16(FP), BX
68 CHECK_BMI2ADX(LMUL, mulLegacy, mulBmi2Adx)
69
70// func sqrAmd64(z, x *Elt)
71TEXT ·sqrAmd64(SB),NOSPLIT,$112-16
72 MOVQ z+0(FP), DI
73 MOVQ x+8(FP), SI
74 CHECK_BMI2ADX(LSQR, sqrLegacy, sqrBmi2Adx)
View as plain text