1
2
3
4
5
6
7
8
9
10
11 package codegen
12
13 import (
14 "math"
15 "simd/archsimd"
16 )
17
18 func vptest1() bool {
19 v1 := archsimd.LoadUint64x2([]uint64{0, 1})
20 v2 := archsimd.LoadUint64x2([]uint64{0, 0})
21
22
23 return v1.AndNot(v2).IsZero()
24 }
25
26 func vptest2() bool {
27 v1 := archsimd.LoadUint64x2([]uint64{0, 1})
28 v2 := archsimd.LoadUint64x2([]uint64{0, 0})
29
30
31 return v1.And(v2).IsZero()
32 }
33
34 type Args2 struct {
35 V0 archsimd.Uint8x32
36 V1 archsimd.Uint8x32
37 x string
38 }
39
40
41 func simdStructNoSpill(a Args2) archsimd.Uint8x32 {
42
43 return a.V0.Xor(a.V1)
44 }
45
46 func simdStructWrapperNoSpill(a Args2) archsimd.Uint8x32 {
47
48 a.x = "test"
49 return simdStructNoSpill(a)
50 }
51
52
53 func simdArrayNoSpill(a [1]Args2) archsimd.Uint8x32 {
54
55 return a[0].V0.Xor(a[0].V1)
56 }
57
58 func simdArrayWrapperNoSpill(a [1]Args2) archsimd.Uint8x32 {
59
60 a[0].x = "test"
61 return simdArrayNoSpill(a)
62 }
63
64 func simdFeatureGuardedMaskOpt() archsimd.Int16x16 {
65 var x, y archsimd.Int16x16
66 if archsimd.X86.AVX512() {
67 mask := archsimd.Mask16x16FromBits(5)
68 return x.Add(y).Masked(mask)
69 }
70 mask := archsimd.Mask16x16FromBits(5)
71 return x.Add(y).Masked(mask)
72 }
73
74 func simdMaskedMerge() archsimd.Int16x16 {
75 var x, y archsimd.Int16x16
76 if archsimd.X86.AVX512() {
77 mask := archsimd.Mask16x16FromBits(5)
78 return x.Add(y).Merge(x, mask)
79 }
80 mask := archsimd.Mask16x16FromBits(5)
81 return x.Add(y).Merge(x, mask)
82 }
83
84 var nan = math.NaN()
85 var floats64s = []float64{0, 1, 2, nan, 4, nan, 6, 7, 8, 9, 10, 11, nan, 13, 14, 15}
86 var sinkInt64s = make([]int64, 100)
87
88 func simdIsNaN() {
89 x := archsimd.LoadFloat64x4(floats64s)
90 y := archsimd.LoadFloat64x4(floats64s[4:])
91 a := x.IsNaN()
92 b := y.IsNaN()
93
94 c := a.Or(b)
95 c.ToInt64x4().Store(sinkInt64s)
96 }
97
98 func simdIsNaN512() {
99 x := archsimd.LoadFloat64x8(floats64s)
100 y := archsimd.LoadFloat64x8(floats64s[8:])
101 a := x.IsNaN()
102 b := y.IsNaN()
103
104 c := a.Or(b)
105 c.ToInt64x8().Store(sinkInt64s)
106 }
107
108 func sftImmVPSRL() archsimd.Uint32x4 {
109 var x archsimd.Uint32x4
110
111 return x.ShiftAllRight(1)
112 }
113
114 func aLtbLtc8_avx512(a, b, c archsimd.Int8x64) archsimd.Mask8x64 {
115
116
117 return a.Less(b).And(b.Less(c))
118 }
119
120 func aLtbORbLtc8_avx512(a, b, c archsimd.Int8x64) archsimd.Mask8x64 {
121
122
123 return a.Less(b).Or(b.Less(c))
124 }
125
126 func aLtbLtc64_avx512(a, b, c archsimd.Int64x8) archsimd.Mask64x8 {
127
128
129 return a.Less(b).And(b.Less(c))
130 }
131
132 func aLtbORbLtc64_avx512(a, b, c archsimd.Int64x8) archsimd.Mask64x8 {
133
134
135 return a.Less(b).Or(b.Less(c))
136 }
137
138 var globalSlice = []uint32{1, 2, 3, 4, 5, 6, 7, 8}
139
140 func simdMemoryOperandMerge() archsimd.Uint32x4 {
141 a := archsimd.BroadcastUint32x4(1)
142
143 a = a.Add(archsimd.LoadUint32x4(globalSlice[0:4]))
144
145 a = a.Add(archsimd.LoadUint32x4(globalSlice[4:8]))
146 return a
147 }
148
View as plain text