1 !sum
2 # Float <-> Int conversions
3 # float32 -> int32
4 - go: ConvertToInt32
5 regexpTag: "convert"
6 asm: "VCVTTP[SD]2DQ"
7 in:
8 - &fp
9 go: $t
10 base: float
11 out:
12 - &i32
13 go: $u
14 base: int
15 elemBits: 32
16 # float32 -> uint32
17 - go: ConvertToUint32
18 regexpTag: "convert"
19 asm: "VCVTTP[SD]2UDQ"
20 in:
21 - *fp
22 out:
23 - &u32
24 go: $u
25 base: uint
26 elemBits: 32
27 # float32|float64 -> int64
28 - go: ConvertToInt64
29 regexpTag: "convert"
30 asm: "VCVTTPD2QQ"
31 in:
32 - *fp
33 out:
34 - &i64
35 go: $u
36 base: int
37 elemBits: 64
38 - go: ConvertToInt64
39 regexpTag: "convert"
40 asm: "VCVTTPS2QQ"
41 in:
42 - *fp
43 out:
44 - go: $u
45 base: int
46 elemBits: 64
47 bits: 256|512
48 # float32|float64 -> uint64
49 - go: ConvertToUint64
50 regexpTag: "convert"
51 asm: "VCVTTPD2UQQ"
52 in:
53 - *fp
54 out:
55 - &u64
56 go: $u
57 base: uint
58 elemBits: 64
59 - go: ConvertToUint64
60 regexpTag: "convert"
61 asm: "VCVTTPS2UQQ"
62 in:
63 - *fp
64 out:
65 - go: $u
66 base: uint
67 elemBits: 64
68 bits: 256|512
69 # int -> float32
70 - go: ConvertToFloat32
71 regexpTag: "convert"
72 asm: "VCVT[DQ]Q2PS"
73 in: &int
74 - go: $i
75 base: int
76 out:
77 - *fp
78 # int -> float64
79 - go: ConvertToFloat64
80 regexpTag: "convert"
81 asm: "VCVTQQ2PD"
82 in: *int
83 out:
84 - *fp
85 - go: ConvertToFloat64
86 regexpTag: "convert"
87 asm: "VCVTDQ2PD"
88 in: *int
89 out:
90 - base: float
91 bits: 256|512
92 # uint -> float32
93 - go: ConvertToFloat32
94 regexpTag: "convert"
95 asm: "VCVTU[DQ]Q2PS"
96 in: &uint
97 - go: $u
98 base: uint
99 out:
100 - *fp
101 # uint -> float64
102 - go: ConvertToFloat64
103 regexpTag: "convert"
104 asm: "VCVTUQQ2PD"
105 in: *uint
106 out:
107 - *fp
108 - go: ConvertToFloat64
109 regexpTag: "convert"
110 asm: "VCVTUDQ2PD"
111 in: *uint
112 out:
113 - base: float
114 bits: 256|512
115 # float64 -> float32
116 - go: ConvertToFloat32
117 regexpTag: "convert"
118 asm: "VCVTPD2PS"
119 addDoc:
120 !string |-
121 // The result vector's elements are rounded to the nearest value.
122 in: &fp64
123 - base: float
124 elemBits: 64
125 out: &fp32
126 - base: float
127 elemBits: 32
128 # float32 -> float64
129 - go: ConvertToFloat64
130 regexpTag: "convert"
131 asm: "VCVTPS2PD"
132 in: *fp32
133 out:
134 - base: float
135 elemBits: 64
136 bits: 256|512
137
138 # Widening integer conversions.
139 # uint8 -> uint16
140 - go: ExtendToUint16
141 regexpTag: "convert"
142 asm: "VPMOVZXBW"
143 in:
144 - &u8x16
145 base: uint
146 elemBits: 8
147 bits: 128
148 out:
149 - &u16x16
150 base: uint
151 elemBits: 16
152 bits: 256
153 - go: ExtendToUint16
154 regexpTag: "convert"
155 asm: "VPMOVZXBW"
156 in:
157 - &u8x32
158 base: uint
159 elemBits: 8
160 bits: 256
161 out:
162 - &u16x32
163 base: uint
164 elemBits: 16
165 bits: 512
166 # int8 -> int16
167 - go: ExtendToInt16
168 regexpTag: "convert"
169 asm: "VPMOVSXBW"
170 in:
171 - &i8x16
172 base: int
173 elemBits: 8
174 bits: 128
175 out:
176 - &i16x16
177 base: int
178 elemBits: 16
179 bits: 256
180 - go: ExtendToInt16
181 regexpTag: "convert"
182 asm: "VPMOVSXBW"
183 in:
184 - &i8x32
185 base: int
186 elemBits: 8
187 bits: 256
188 out:
189 - &i16x32
190 base: int
191 elemBits: 16
192 bits: 512
193 # uint16->uint32
194 - go: ExtendToUint32
195 regexpTag: "convert"
196 asm: "VPMOVZXWD"
197 in:
198 - &u16x8
199 base: uint
200 elemBits: 16
201 bits: 128
202 out:
203 - &u32x8
204 base: uint
205 elemBits: 32
206 bits: 256
207 - go: ExtendToUint32
208 regexpTag: "convert"
209 asm: "VPMOVZXWD"
210 in:
211 - *u16x16
212 out:
213 - &u32x16
214 base: uint
215 elemBits: 32
216 bits: 512
217 # int16->int32
218 - go: ExtendToInt32
219 regexpTag: "convert"
220 asm: "VPMOVSXWD"
221 in:
222 - &i16x8
223 base: int
224 elemBits: 16
225 bits: 128
226 out:
227 - &i32x8
228 base: int
229 elemBits: 32
230 bits: 256
231 - go: ExtendToInt32
232 regexpTag: "convert"
233 asm: "VPMOVSXWD"
234 in:
235 - *i16x16
236 out:
237 - &i32x16
238 base: int
239 elemBits: 32
240 bits: 512
241 # uint32 -> uint64
242 - go: ExtendToUint64
243 regexpTag: "convert"
244 asm: "VPMOVZXDQ"
245 in:
246 - &u32x4
247 base: uint
248 elemBits: 32
249 bits: 128
250 out:
251 - &u64x4
252 base: uint
253 elemBits: 64
254 bits: 256
255 - go: ExtendToUint64
256 regexpTag: "convert"
257 asm: "VPMOVZXDQ"
258 in:
259 - *u32x8
260 out:
261 - &u64x8
262 base: uint
263 elemBits: 64
264 bits: 512
265 # int32 -> int64
266 - go: ExtendToInt64
267 regexpTag: "convert"
268 asm: "VPMOVSXDQ"
269 in:
270 - &i32x4
271 base: int
272 elemBits: 32
273 bits: 128
274 out:
275 - &i64x4
276 base: int
277 elemBits: 64
278 bits: 256
279 - go: ExtendToInt64
280 regexpTag: "convert"
281 asm: "VPMOVSXDQ"
282 in:
283 - *i32x8
284 out:
285 - &i64x8
286 base: int
287 elemBits: 64
288 bits: 512
289 # uint16 -> uint64
290 - go: ExtendToUint64
291 regexpTag: "convert"
292 asm: "VPMOVZXWQ"
293 in:
294 - *u16x8
295 out:
296 - *u64x8
297 # int16 -> int64
298 - go: ExtendToInt64
299 regexpTag: "convert"
300 asm: "VPMOVSXWQ"
301 in:
302 - *i16x8
303 out:
304 - *i64x8
305 # uint8 -> uint32
306 - go: ExtendToUint32
307 regexpTag: "convert"
308 asm: "VPMOVZXBD"
309 in:
310 - *u8x16
311 out:
312 - *u32x16
313 # int8 -> int32
314 - go: ExtendToInt32
315 regexpTag: "convert"
316 asm: "VPMOVSXBD"
317 in:
318 - *i8x16
319 out:
320 - *i32x16
321 # Truncating conversions
322 - go: TruncateToInt8
323 regexpTag: "convert"
324 asm: "VPMOV[WDQ]B"
325 in:
326 - base: int
327 out:
328 - base: int
329 bits: 128
330 - go: TruncateToUint8
331 regexpTag: "convert"
332 asm: "VPMOV[WDQ]B"
333 in:
334 - base: uint
335 out:
336 - base: uint
337 bits: 128
338 - go: TruncateToInt8
339 regexpTag: "convert"
340 asm: "VPMOV[WDQ]B"
341 in:
342 - base: int
343 out:
344 - base: int
345 bits: 256|512
346 - go: TruncateToUint8
347 regexpTag: "convert"
348 asm: "VPMOV[WDQ]B"
349 in:
350 - base: uint
351 out:
352 - base: uint
353 bits: 256|512
354 - go: TruncateToInt16
355 regexpTag: "convert"
356 asm: "VPMOV[DQ]W"
357 in:
358 - base: int
359 out:
360 - base: int
361 - go: TruncateToUint16
362 regexpTag: "convert"
363 asm: "VPMOV[DQ]W"
364 in:
365 - base: uint
366 out:
367 - base: uint
368 - go: TruncateToInt32
369 regexpTag: "convert"
370 asm: "VPMOVQD"
371 in:
372 - base: int
373 out:
374 - base: int
375 - go: TruncateToUint32
376 regexpTag: "convert"
377 asm: "VPMOVQD"
378 in:
379 - base: uint
380 out:
381 - base: uint
382 # Saturated conversions.
383 - go: SaturateToInt8
384 regexpTag: "convert"
385 asm: "VPMOVS[WDQ]B"
386 in:
387 - base: int
388 out:
389 - base: int
390 bits: 128
391 - go: SaturateToUint8
392 regexpTag: "convert"
393 asm: "VPMOVS[WDQ]B"
394 in:
395 - base: int
396 out:
397 - base: int
398 bits: 128
399 - go: SaturateToInt8
400 regexpTag: "convert"
401 asm: "VPMOVS[WDQ]B"
402 in:
403 - base: int
404 out:
405 - base: int
406 bits: 256|512
407 - go: SaturateToUint8
408 regexpTag: "convert"
409 asm: "VPMOVUS[WDQ]B"
410 in:
411 - base: uint
412 out:
413 - base: uint
414 bits: 256|512
415 - go: SaturateToInt16
416 regexpTag: "convert"
417 asm: "VPMOVS[DQ]W"
418 in:
419 - base: int
420 out:
421 - base: int
422 - go: SaturateToUint16
423 regexpTag: "convert"
424 asm: "VPMOVUS[DQ]W"
425 in:
426 - base: uint
427 out:
428 - base: uint
429 - go: SaturateToInt32
430 regexpTag: "convert"
431 asm: "VPMOVSQD"
432 in:
433 - base: int
434 out:
435 - base: int
436 - go: SaturateToUint32
437 regexpTag: "convert"
438 asm: "VPMOVUSQD"
439 in:
440 - base: uint
441 out:
442 - base: uint
443 # Truncating saturated packed
444 - go: SaturateToInt16Concat
445 regexpTag: "convert"
446 asm: "VPACKSSDW"
447 addDoc: &satDocConcat
448 !string |-
449 // With each 128-bit as a group:
450 // The converted group from the first input vector will be packed to the lower part of the result vector,
451 // the converted group from the second input vector will be packed to the upper part of the result vector.
452 in:
453 - base: int
454 - base: int
455 out:
456 - base: int
457 - go: SaturateToUint16Concat
458 regexpTag: "convert"
459 asm: "VPACKUSDW"
460 in:
461 - base: uint
462 - base: uint
463 out:
464 - base: uint
465
466 # low-part only conversions.
467 # uint8->uint16
468 - go: ExtendLo8ToUint16x8
469 regexpTag: "convert"
470 asm: "VPMOVZXBW"
471 in:
472 - *u8x16
473 out:
474 - *u16x8
475 # int8->int16
476 - go: ExtendLo8ToInt16x8
477 regexpTag: "convert"
478 asm: "VPMOVSXBW"
479 in:
480 - *i8x16
481 out:
482 - *i16x8
483 # uint16->uint32
484 - go: ExtendLo4ToUint32x4
485 regexpTag: "convert"
486 asm: "VPMOVZXWD"
487 in:
488 - *u16x8
489 out:
490 - *u32x4
491 # int16->int32
492 - go: ExtendLo4ToInt32x4
493 regexpTag: "convert"
494 asm: "VPMOVSXWD"
495 in:
496 - *i16x8
497 out:
498 - *i32x4
499 # uint32 -> uint64
500 - go: ExtendLo2ToUint64x2
501 regexpTag: "convert"
502 asm: "VPMOVZXDQ"
503 in:
504 - *u32x4
505 out:
506 - &u64x2
507 base: uint
508 elemBits: 64
509 bits: 128
510 # int32 -> int64
511 - go: ExtendLo2ToInt64x2
512 regexpTag: "convert"
513 asm: "VPMOVSXDQ"
514 in:
515 - *i32x4
516 out:
517 - &i64x2
518 base: int
519 elemBits: 64
520 bits: 128
521 # uint16 -> uint64
522 - go: ExtendLo2ToUint64x2
523 regexpTag: "convert"
524 asm: "VPMOVZXWQ"
525 in:
526 - *u16x8
527 out:
528 - *u64x2
529 - go: ExtendLo4ToUint64x4
530 regexpTag: "convert"
531 asm: "VPMOVZXWQ"
532 in:
533 - *u16x8
534 out:
535 - *u64x4
536 # int16 -> int64
537 - go: ExtendLo2ToInt64x2
538 regexpTag: "convert"
539 asm: "VPMOVSXWQ"
540 in:
541 - *i16x8
542 out:
543 - *i64x2
544 - go: ExtendLo4ToInt64x4
545 regexpTag: "convert"
546 asm: "VPMOVSXWQ"
547 in:
548 - *i16x8
549 out:
550 - *i64x4
551 # uint8 -> uint32
552 - go: ExtendLo4ToUint32x4
553 regexpTag: "convert"
554 asm: "VPMOVZXBD"
555 in:
556 - *u8x16
557 out:
558 - *u32x4
559 - go: ExtendLo8ToUint32x8
560 regexpTag: "convert"
561 asm: "VPMOVZXBD"
562 in:
563 - *u8x16
564 out:
565 - *u32x8
566 # int8 -> int32
567 - go: ExtendLo4ToInt32x4
568 regexpTag: "convert"
569 asm: "VPMOVSXBD"
570 in:
571 - *i8x16
572 out:
573 - *i32x4
574 - go: ExtendLo8ToInt32x8
575 regexpTag: "convert"
576 asm: "VPMOVSXBD"
577 in:
578 - *i8x16
579 out:
580 - *i32x8
581 # uint8 -> uint64
582 - go: ExtendLo2ToUint64x2
583 regexpTag: "convert"
584 asm: "VPMOVZXBQ"
585 in:
586 - *u8x16
587 out:
588 - *u64x2
589 - go: ExtendLo4ToUint64x4
590 regexpTag: "convert"
591 asm: "VPMOVZXBQ"
592 in:
593 - *u8x16
594 out:
595 - *u64x4
596 - go: ExtendLo8ToUint64x8
597 regexpTag: "convert"
598 asm: "VPMOVZXBQ"
599 in:
600 - *u8x16
601 out:
602 - *u64x8
603 # int8 -> int64
604 - go: ExtendLo2ToInt64x2
605 regexpTag: "convert"
606 asm: "VPMOVSXBQ"
607 in:
608 - *i8x16
609 out:
610 - *i64x2
611 - go: ExtendLo4ToInt64x4
612 regexpTag: "convert"
613 asm: "VPMOVSXBQ"
614 in:
615 - *i8x16
616 out:
617 - *i64x4
618 - go: ExtendLo8ToInt64x8
619 regexpTag: "convert"
620 asm: "VPMOVSXBQ"
621 in:
622 - *i8x16
623 out:
624 - *i64x8
625
View as plain text