1
2
3 package arm64
4
5 import (
6 "cmd/compile/internal/ssa"
7 "cmd/compile/internal/ssa/ssaop"
8 "cmd/compile/internal/ssagen"
9 "cmd/internal/obj"
10 "cmd/internal/obj/arm64"
11 )
12
13 func ssaGenSIMDSVEValue(s *ssagen.State, v *ssa.Value) bool {
14 var p *obj.Prog
15 switch v.Op {
16 case ssaop.OpARM64ZABSB,
17 ssaop.OpARM64ZNEGB:
18 p = simdZkv(s, v, arm64.ARNG_B)
19
20 case ssaop.OpARM64ZFABSD,
21 ssaop.OpARM64ZABSD,
22 ssaop.OpARM64ZFRINTPD,
23 ssaop.OpARM64ZFRINTMD,
24 ssaop.OpARM64ZFNEGD,
25 ssaop.OpARM64ZNEGD,
26 ssaop.OpARM64ZFRINTND,
27 ssaop.OpARM64ZFSQRTD,
28 ssaop.OpARM64ZFRINTZD:
29 p = simdZkv(s, v, arm64.ARNG_D)
30
31 case ssaop.OpARM64ZABSH,
32 ssaop.OpARM64ZNEGH:
33 p = simdZkv(s, v, arm64.ARNG_H)
34
35 case ssaop.OpARM64ZFABSS,
36 ssaop.OpARM64ZABSS,
37 ssaop.OpARM64ZFRINTPS,
38 ssaop.OpARM64ZFRINTMS,
39 ssaop.OpARM64ZFNEGS,
40 ssaop.OpARM64ZNEGS,
41 ssaop.OpARM64ZFRINTNS,
42 ssaop.OpARM64ZFSQRTS,
43 ssaop.OpARM64ZFRINTZS:
44 p = simdZkv(s, v, arm64.ARNG_S)
45
46 case ssaop.OpARM64ZADDB,
47 ssaop.OpARM64ZSQADDB,
48 ssaop.OpARM64ZUQADDB,
49 ssaop.OpARM64ZMULB,
50 ssaop.OpARM64ZSMULHB,
51 ssaop.OpARM64ZUMULHB,
52 ssaop.OpARM64ZSUBB,
53 ssaop.OpARM64ZSQSUBB,
54 ssaop.OpARM64ZUQSUBB:
55 p = simdZ21(s, v, arm64.ARNG_B)
56
57 case ssaop.OpARM64ZFADDD,
58 ssaop.OpARM64ZADDD,
59 ssaop.OpARM64ZSQADDD,
60 ssaop.OpARM64ZUQADDD,
61 ssaop.OpARM64ZANDD,
62 ssaop.OpARM64ZBICD,
63 ssaop.OpARM64ZFMULD,
64 ssaop.OpARM64ZMULD,
65 ssaop.OpARM64ZSMULHD,
66 ssaop.OpARM64ZUMULHD,
67 ssaop.OpARM64ZORRD,
68 ssaop.OpARM64ZFSUBD,
69 ssaop.OpARM64ZSUBD,
70 ssaop.OpARM64ZSQSUBD,
71 ssaop.OpARM64ZUQSUBD,
72 ssaop.OpARM64ZEORD:
73 p = simdZ21(s, v, arm64.ARNG_D)
74
75 case ssaop.OpARM64ZADDH,
76 ssaop.OpARM64ZSQADDH,
77 ssaop.OpARM64ZUQADDH,
78 ssaop.OpARM64ZMULH,
79 ssaop.OpARM64ZSMULHH,
80 ssaop.OpARM64ZUMULHH,
81 ssaop.OpARM64ZSUBH,
82 ssaop.OpARM64ZSQSUBH,
83 ssaop.OpARM64ZUQSUBH:
84 p = simdZ21(s, v, arm64.ARNG_H)
85
86 case ssaop.OpARM64ZFADDS,
87 ssaop.OpARM64ZADDS,
88 ssaop.OpARM64ZSQADDS,
89 ssaop.OpARM64ZUQADDS,
90 ssaop.OpARM64ZFMULS,
91 ssaop.OpARM64ZMULS,
92 ssaop.OpARM64ZSMULHS,
93 ssaop.OpARM64ZUMULHS,
94 ssaop.OpARM64ZFSUBS,
95 ssaop.OpARM64ZSUBS,
96 ssaop.OpARM64ZSQSUBS,
97 ssaop.OpARM64ZUQSUBS:
98 p = simdZ21(s, v, arm64.ARNG_S)
99
100 case ssaop.OpARM64ZCMPEQB,
101 ssaop.OpARM64ZCMPGTB,
102 ssaop.OpARM64ZCMPHIB,
103 ssaop.OpARM64ZCMPGEB,
104 ssaop.OpARM64ZCMPHSB,
105 ssaop.OpARM64ZCMPNEB:
106 p = simdZ2kk(s, v, arm64.ARNG_B)
107
108 case ssaop.OpARM64ZFCMEQD,
109 ssaop.OpARM64ZCMPEQD,
110 ssaop.OpARM64ZFCMGTD,
111 ssaop.OpARM64ZCMPGTD,
112 ssaop.OpARM64ZCMPHID,
113 ssaop.OpARM64ZFCMGED,
114 ssaop.OpARM64ZCMPGED,
115 ssaop.OpARM64ZCMPHSD,
116 ssaop.OpARM64ZFCMNED,
117 ssaop.OpARM64ZCMPNED:
118 p = simdZ2kk(s, v, arm64.ARNG_D)
119
120 case ssaop.OpARM64ZCMPEQH,
121 ssaop.OpARM64ZCMPGTH,
122 ssaop.OpARM64ZCMPHIH,
123 ssaop.OpARM64ZCMPGEH,
124 ssaop.OpARM64ZCMPHSH,
125 ssaop.OpARM64ZCMPNEH:
126 p = simdZ2kk(s, v, arm64.ARNG_H)
127
128 case ssaop.OpARM64ZFCMEQS,
129 ssaop.OpARM64ZCMPEQS,
130 ssaop.OpARM64ZFCMGTS,
131 ssaop.OpARM64ZCMPGTS,
132 ssaop.OpARM64ZCMPHIS,
133 ssaop.OpARM64ZFCMGES,
134 ssaop.OpARM64ZCMPGES,
135 ssaop.OpARM64ZCMPHSS,
136 ssaop.OpARM64ZFCMNES,
137 ssaop.OpARM64ZCMPNES:
138 p = simdZ2kk(s, v, arm64.ARNG_S)
139
140 case ssaop.OpARM64ZADDMergingB,
141 ssaop.OpARM64ZSQADDMergingB,
142 ssaop.OpARM64ZUQADDMergingB,
143 ssaop.OpARM64ZANDMergingB,
144 ssaop.OpARM64ZBICMergingB,
145 ssaop.OpARM64ZMULMergingB,
146 ssaop.OpARM64ZSMULHMergingB,
147 ssaop.OpARM64ZUMULHMergingB,
148 ssaop.OpARM64ZORRMergingB,
149 ssaop.OpARM64ZSUBMergingB,
150 ssaop.OpARM64ZSQSUBMergingB,
151 ssaop.OpARM64ZUQSUBMergingB,
152 ssaop.OpARM64ZEORMergingB:
153 p = simdZ2kvPred(s, v, arm64.ARNG_B)
154
155 case ssaop.OpARM64ZFADDMergingD,
156 ssaop.OpARM64ZADDMergingD,
157 ssaop.OpARM64ZSQADDMergingD,
158 ssaop.OpARM64ZUQADDMergingD,
159 ssaop.OpARM64ZANDMergingD,
160 ssaop.OpARM64ZBICMergingD,
161 ssaop.OpARM64ZFMULMergingD,
162 ssaop.OpARM64ZMULMergingD,
163 ssaop.OpARM64ZSMULHMergingD,
164 ssaop.OpARM64ZUMULHMergingD,
165 ssaop.OpARM64ZORRMergingD,
166 ssaop.OpARM64ZFSUBMergingD,
167 ssaop.OpARM64ZSUBMergingD,
168 ssaop.OpARM64ZSQSUBMergingD,
169 ssaop.OpARM64ZUQSUBMergingD,
170 ssaop.OpARM64ZEORMergingD:
171 p = simdZ2kvPred(s, v, arm64.ARNG_D)
172
173 case ssaop.OpARM64ZADDMergingH,
174 ssaop.OpARM64ZSQADDMergingH,
175 ssaop.OpARM64ZUQADDMergingH,
176 ssaop.OpARM64ZANDMergingH,
177 ssaop.OpARM64ZBICMergingH,
178 ssaop.OpARM64ZMULMergingH,
179 ssaop.OpARM64ZSMULHMergingH,
180 ssaop.OpARM64ZUMULHMergingH,
181 ssaop.OpARM64ZORRMergingH,
182 ssaop.OpARM64ZSUBMergingH,
183 ssaop.OpARM64ZSQSUBMergingH,
184 ssaop.OpARM64ZUQSUBMergingH,
185 ssaop.OpARM64ZEORMergingH:
186 p = simdZ2kvPred(s, v, arm64.ARNG_H)
187
188 case ssaop.OpARM64ZFADDMergingS,
189 ssaop.OpARM64ZADDMergingS,
190 ssaop.OpARM64ZSQADDMergingS,
191 ssaop.OpARM64ZUQADDMergingS,
192 ssaop.OpARM64ZANDMergingS,
193 ssaop.OpARM64ZBICMergingS,
194 ssaop.OpARM64ZFMULMergingS,
195 ssaop.OpARM64ZMULMergingS,
196 ssaop.OpARM64ZSMULHMergingS,
197 ssaop.OpARM64ZUMULHMergingS,
198 ssaop.OpARM64ZORRMergingS,
199 ssaop.OpARM64ZFSUBMergingS,
200 ssaop.OpARM64ZSUBMergingS,
201 ssaop.OpARM64ZSQSUBMergingS,
202 ssaop.OpARM64ZUQSUBMergingS,
203 ssaop.OpARM64ZEORMergingS:
204 p = simdZ2kvPred(s, v, arm64.ARNG_S)
205
206 case ssaop.OpARM64ZABSMergingB,
207 ssaop.OpARM64ZNEGMergingB:
208 p = simdZ2kvPredResultInArg0(s, v, arm64.ARNG_B)
209
210 case ssaop.OpARM64ZFABSMergingD,
211 ssaop.OpARM64ZABSMergingD,
212 ssaop.OpARM64ZFNEGMergingD,
213 ssaop.OpARM64ZNEGMergingD,
214 ssaop.OpARM64ZFSQRTMergingD:
215 p = simdZ2kvPredResultInArg0(s, v, arm64.ARNG_D)
216
217 case ssaop.OpARM64ZABSMergingH,
218 ssaop.OpARM64ZNEGMergingH:
219 p = simdZ2kvPredResultInArg0(s, v, arm64.ARNG_H)
220
221 case ssaop.OpARM64ZFABSMergingS,
222 ssaop.OpARM64ZABSMergingS,
223 ssaop.OpARM64ZFNEGMergingS,
224 ssaop.OpARM64ZNEGMergingS,
225 ssaop.OpARM64ZFSQRTMergingS:
226 p = simdZ2kvPredResultInArg0(s, v, arm64.ARNG_S)
227
228 case ssaop.OpARM64ZADDMergingPrefixedB,
229 ssaop.OpARM64ZSQADDMergingPrefixedB,
230 ssaop.OpARM64ZUQADDMergingPrefixedB,
231 ssaop.OpARM64ZANDMergingPrefixedB,
232 ssaop.OpARM64ZMULMergingPrefixedB,
233 ssaop.OpARM64ZSMULHMergingPrefixedB,
234 ssaop.OpARM64ZUMULHMergingPrefixedB,
235 ssaop.OpARM64ZORRMergingPrefixedB,
236 ssaop.OpARM64ZEORMergingPrefixedB:
237 p = simdZ3kvPredResultInArg0(s, v, arm64.ARNG_B)
238
239 case ssaop.OpARM64ZFADDMergingPrefixedD,
240 ssaop.OpARM64ZADDMergingPrefixedD,
241 ssaop.OpARM64ZSQADDMergingPrefixedD,
242 ssaop.OpARM64ZUQADDMergingPrefixedD,
243 ssaop.OpARM64ZANDMergingPrefixedD,
244 ssaop.OpARM64ZFMULMergingPrefixedD,
245 ssaop.OpARM64ZMULMergingPrefixedD,
246 ssaop.OpARM64ZSMULHMergingPrefixedD,
247 ssaop.OpARM64ZUMULHMergingPrefixedD,
248 ssaop.OpARM64ZORRMergingPrefixedD,
249 ssaop.OpARM64ZEORMergingPrefixedD:
250 p = simdZ3kvPredResultInArg0(s, v, arm64.ARNG_D)
251
252 case ssaop.OpARM64ZADDMergingPrefixedH,
253 ssaop.OpARM64ZSQADDMergingPrefixedH,
254 ssaop.OpARM64ZUQADDMergingPrefixedH,
255 ssaop.OpARM64ZANDMergingPrefixedH,
256 ssaop.OpARM64ZMULMergingPrefixedH,
257 ssaop.OpARM64ZSMULHMergingPrefixedH,
258 ssaop.OpARM64ZUMULHMergingPrefixedH,
259 ssaop.OpARM64ZORRMergingPrefixedH,
260 ssaop.OpARM64ZEORMergingPrefixedH:
261 p = simdZ3kvPredResultInArg0(s, v, arm64.ARNG_H)
262
263 case ssaop.OpARM64ZFADDMergingPrefixedS,
264 ssaop.OpARM64ZADDMergingPrefixedS,
265 ssaop.OpARM64ZSQADDMergingPrefixedS,
266 ssaop.OpARM64ZUQADDMergingPrefixedS,
267 ssaop.OpARM64ZANDMergingPrefixedS,
268 ssaop.OpARM64ZFMULMergingPrefixedS,
269 ssaop.OpARM64ZMULMergingPrefixedS,
270 ssaop.OpARM64ZSMULHMergingPrefixedS,
271 ssaop.OpARM64ZUMULHMergingPrefixedS,
272 ssaop.OpARM64ZORRMergingPrefixedS,
273 ssaop.OpARM64ZEORMergingPrefixedS:
274 p = simdZ3kvPredResultInArg0(s, v, arm64.ARNG_S)
275
276 default:
277
278 return false
279 }
280
281
282 _ = p
283 return true
284 }
285
View as plain text