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