Source file
test/simd.go
1
2
3
4
5
6
7
8
9 package foo
10
11 import (
12 "fmt"
13 "simd/archsimd"
14 )
15
16 func f1(x archsimd.Int8x16) {
17 return
18 }
19
20 func g1() archsimd.Int8x16 {
21 var x archsimd.Int8x16
22 return x
23 }
24
25 type T1 archsimd.Int8x16
26
27 func (x T1) h() {
28 return
29 }
30
31 func f2(x archsimd.Int8x64) {
32 return
33 }
34
35 func g2() archsimd.Int8x64 {
36 var x archsimd.Int8x64
37 return x
38 }
39
40 type T2 archsimd.Int8x64
41
42 func (x T2) h() {
43 return
44 }
45
46 var a int
47
48 func f() {
49 if a == 0 {
50 if !archsimd.X86.AVX512() {
51 return
52 }
53 println("has avx512")
54 } else {
55 if !archsimd.X86.AVX2() {
56 return
57 }
58 println("has avx2")
59 }
60 println("has something")
61 }
62
63 func g() {
64 if archsimd.X86.AVX2() {
65 for range 5 {
66 if a < 0 {
67 a++
68 }
69 }
70 }
71 println("ahoy!")
72 if a > 0 {
73 a--
74 }
75 }
76
77
78 func p() bool {
79 return true
80 }
81
82 func hasIrreducibleLoop() {
83 if archsimd.X86.AVX2() {
84 goto a
85 } else {
86 goto b
87 }
88 a:
89 println("a")
90 if p() {
91 goto c
92 }
93 b:
94 println("b")
95 if p() {
96 goto a
97 }
98 c:
99 println("c")
100 }
101
102 func ternRewrite(m, w, x, y, z archsimd.Int32x16) (t0, t1, t2 archsimd.Int32x16) {
103 if !archsimd.X86.AVX512() {
104 return
105 }
106 t0 = w.Xor(y).Xor(z)
107 t1 = m.And(w.Xor(y).Xor(z.Not()))
108 t2 = x.Xor(y).Xor(z).And(x.Xor(y).Xor(z.Not()))
109 return
110 }
111
112 func ternTricky1(x, y, z archsimd.Int32x8) archsimd.Int32x8 {
113
114
115 a := x.Xor(y).Xor(z)
116 var w archsimd.Int32x8
117 if !archsimd.X86.AVX512() {
118
119 } else {
120 w = y.AndNot(a)
121 }
122
123 return a.Or(w)
124 }
125
126 func ternTricky2(x, y, z archsimd.Int32x8) archsimd.Int32x8 {
127
128 var a, w archsimd.Int32x8
129 if !archsimd.X86.AVX512() {
130
131 } else {
132 a = x.Xor(y).Xor(z)
133 w = y.AndNot(a)
134 }
135
136 return a.Or(w)
137 }
138
139 func ternTricky3(x, y, z archsimd.Int32x8) archsimd.Int32x8 {
140
141 a := x.Xor(y).Xor(z)
142 w := y.AndNot(a)
143 if !archsimd.X86.AVX512() {
144 return a
145 }
146
147 return a.Or(w)
148 }
149
150 func vpternlogdPanic() {
151 resultsMask := archsimd.Mask64x8{}
152
153 for {
154 resultsMask = archsimd.Mask64x8FromBits(0).Or(
155 archsimd.Float64x8{}.Less(
156 archsimd.BroadcastFloat64x8(0))).Or(resultsMask)
157 fmt.Print(resultsMask.And(resultsMask.And(archsimd.Mask64x8{})))
158 }
159 }
160
View as plain text