1 !sum
2
3 - go: TruncToInt8
4 asm: "VXTN"
5 hiHalfAsm: "VXTN2"
6 in:
7 - base: int
8 elemBits: 16
9 out:
10 - base: int
11 bits: 128
12
13 - go: TruncToUint8
14 asm: "VXTN"
15 hiHalfAsm: "VXTN2"
16 in:
17 - base: uint
18 elemBits: 16
19 out:
20 - base: uint
21 bits: 128
22
23 - go: TruncToInt16
24 asm: "VXTN"
25 hiHalfAsm: "VXTN2"
26 in:
27 - base: int
28 elemBits: 32
29 out:
30 - base: int
31 bits: 128
32
33 - go: TruncToUint16
34 asm: "VXTN"
35 hiHalfAsm: "VXTN2"
36 in:
37 - base: uint
38 elemBits: 32
39 out:
40 - base: uint
41 bits: 128
42
43 - go: TruncToInt32
44 asm: "VXTN"
45 hiHalfAsm: "VXTN2"
46 in:
47 - base: int
48 elemBits: 64
49 out:
50 - base: int
51 bits: 128
52
53 - go: TruncToUint32
54 asm: "VXTN"
55 hiHalfAsm: "VXTN2"
56 in:
57 - base: uint
58 elemBits: 64
59 out:
60 - base: uint
61 bits: 128
62
63 # Float -> Int conversions (same-size)
64 # ISA XML has float→float for FCVTZS_int; use OverwriteBase to correct output type
65 # float32 -> int32
66 - go: ConvertToInt32
67 asm: "VFCVTZS"
68 in:
69 - base: float
70 elemBits: 32
71 out:
72 - base: float
73 elemBits: 32
74 OverwriteBase: int
75
76 # float32 -> uint32
77 - go: ConvertToUint32
78 asm: "VFCVTZU"
79 in:
80 - base: float
81 elemBits: 32
82 out:
83 - base: float
84 elemBits: 32
85 OverwriteBase: uint
86
87 # float64 -> int64
88 - go: ConvertToInt64
89 asm: "VFCVTZS"
90 in:
91 - base: float
92 elemBits: 64
93 out:
94 - base: float
95 elemBits: 64
96 OverwriteBase: int
97
98 # float64 -> uint64
99 - go: ConvertToUint64
100 asm: "VFCVTZU"
101 in:
102 - base: float
103 elemBits: 64
104 out:
105 - base: float
106 elemBits: 64
107 OverwriteBase: uint
108
109 # Int -> Float conversions (same-size)
110 # ISA XML has float→float for SCVTF_int/UCVTF_int; use OverwriteBase to correct input type
111 # int32 -> float32
112 - go: ConvertToFloat32
113 asm: "VSCVTF"
114 in:
115 - base: float
116 elemBits: 32
117 OverwriteBase: int
118 out:
119 - base: float
120 elemBits: 32
121
122 # uint32 -> float32
123 - go: ConvertToFloat32
124 asm: "VUCVTF"
125 in:
126 - base: float
127 elemBits: 32
128 OverwriteBase: uint
129 out:
130 - base: float
131 elemBits: 32
132
133 # int64 -> float64
134 - go: ConvertToFloat64
135 asm: "VSCVTF"
136 in:
137 - base: float
138 elemBits: 64
139 OverwriteBase: int
140 out:
141 - base: float
142 elemBits: 64
143
144 # uint64 -> float64
145 - go: ConvertToFloat64
146 asm: "VUCVTF"
147 in:
148 - base: float
149 elemBits: 64
150 OverwriteBase: uint
151 out:
152 - base: float
153 elemBits: 64
154
155 # Float narrow/widen
156 # float64 -> float32 narrow
157 - go: ConvertToFloat32
158 asm: "VFCVTN"
159 hiHalfAsm: "VFCVTN2"
160 in:
161 - base: float
162 elemBits: 64
163 out:
164 - base: float
165 elemBits: 32
166 bits: 128
167
168 # float32 -> float64 widen
169 - go: ConvertLo2ToFloat64
170 asm: "VFCVTL"
171 hiHalfAsm: "VFCVTL2"
172 in:
173 - base: float
174 elemBits: 32
175 out:
176 - base: float
177 elemBits: 64
178 bits: 128
179
180 # Integer extend (widen) — signed
181 # int8 -> int16
182 - go: ExtendLo8ToInt16
183 asm: "VSXTL"
184 hiHalfAsm: "VSXTL2"
185 in:
186 - base: int
187 elemBits: 8
188 out:
189 - base: int
190 elemBits: 16
191 bits: 128
192
193 # int16 -> int32
194 - go: ExtendLo4ToInt32
195 asm: "VSXTL"
196 hiHalfAsm: "VSXTL2"
197 in:
198 - base: int
199 elemBits: 16
200 out:
201 - base: int
202 elemBits: 32
203 bits: 128
204
205 # int32 -> int64
206 - go: ExtendLo2ToInt64
207 asm: "VSXTL"
208 hiHalfAsm: "VSXTL2"
209 in:
210 - base: int
211 elemBits: 32
212 out:
213 - base: int
214 elemBits: 64
215 bits: 128
216
217 # Integer extend (widen) — unsigned
218 # uint8 -> uint16
219 - go: ExtendLo8ToUint16
220 asm: "VUXTL"
221 hiHalfAsm: "VUXTL2"
222 in:
223 - base: uint
224 elemBits: 8
225 out:
226 - base: uint
227 elemBits: 16
228 bits: 128
229
230 # uint16 -> uint32
231 - go: ExtendLo4ToUint32
232 asm: "VUXTL"
233 hiHalfAsm: "VUXTL2"
234 in:
235 - base: uint
236 elemBits: 16
237 out:
238 - base: uint
239 elemBits: 32
240 bits: 128
241
242 # uint32 -> uint64
243 - go: ExtendLo2ToUint64
244 asm: "VUXTL"
245 hiHalfAsm: "VUXTL2"
246 in:
247 - base: uint
248 elemBits: 32
249 out:
250 - base: uint
251 elemBits: 64
252 bits: 128
253
254 # Saturating narrow — signed (VSQXTN/VSQXTN2)
255 - go: SaturateToInt8
256 asm: "VSQXTN"
257 hiHalfAsm: "VSQXTN2"
258 in:
259 - base: int
260 elemBits: 16
261 out:
262 - base: int
263 elemBits: 8
264 bits: 128
265
266 - go: SaturateToInt16
267 asm: "VSQXTN"
268 hiHalfAsm: "VSQXTN2"
269 in:
270 - base: int
271 elemBits: 32
272 out:
273 - base: int
274 elemBits: 16
275 bits: 128
276
277 - go: SaturateToInt32
278 asm: "VSQXTN"
279 hiHalfAsm: "VSQXTN2"
280 in:
281 - base: int
282 elemBits: 64
283 out:
284 - base: int
285 elemBits: 32
286 bits: 128
287
288 # Saturating narrow — signed to unsigned (VSQXTUN/VSQXTUN2)
289 # ISA XML has int→int for SQXTUN; use OverwriteBase to correct output type
290 - go: SaturateToUint8
291 asm: "VSQXTUN"
292 hiHalfAsm: "VSQXTUN2"
293 in:
294 - base: int
295 elemBits: 16
296 out:
297 - base: int
298 elemBits: 8
299 bits: 128
300 OverwriteBase: uint
301
302 - go: SaturateToUint16
303 asm: "VSQXTUN"
304 hiHalfAsm: "VSQXTUN2"
305 in:
306 - base: int
307 elemBits: 32
308 out:
309 - base: int
310 elemBits: 16
311 bits: 128
312 OverwriteBase: uint
313
314 - go: SaturateToUint32
315 asm: "VSQXTUN"
316 hiHalfAsm: "VSQXTUN2"
317 in:
318 - base: int
319 elemBits: 64
320 out:
321 - base: int
322 elemBits: 32
323 bits: 128
324 OverwriteBase: uint
325
326 # Saturating narrow — unsigned (VUQXTN/VUQXTN2)
327 - go: SaturateToUint8
328 asm: "VUQXTN"
329 hiHalfAsm: "VUQXTN2"
330 in:
331 - base: uint
332 elemBits: 16
333 out:
334 - base: uint
335 elemBits: 8
336 bits: 128
337
338 - go: SaturateToUint16
339 asm: "VUQXTN"
340 hiHalfAsm: "VUQXTN2"
341 in:
342 - base: uint
343 elemBits: 32
344 out:
345 - base: uint
346 elemBits: 16
347 bits: 128
348
349 - go: SaturateToUint32
350 asm: "VUQXTN"
351 hiHalfAsm: "VUQXTN2"
352 in:
353 - base: uint
354 elemBits: 64
355 out:
356 - base: uint
357 elemBits: 32
358 bits: 128
359
View as plain text