...
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: "VPMOVUS[WDQ]B"
394 in:
395 - base: uint
396 out:
397 - base: uint
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 // The converted elements from x will be packed to the lower part of the result vector,
450 // the converted elements from y will be packed to the upper part of the result vector.
451 in:
452 - base: int
453 - base: int
454 out:
455 - base: int
456 bits: 128
457- go: SaturateToInt16ConcatGrouped
458 regexpTag: "convert"
459 asm: "VPACKSSDW"
460 addDoc: &satDocConcatGrouped
461 !string |-
462 // With each 128-bit as a group:
463 // The converted elements from x will be packed to the lower part of the group in the result vector,
464 // the converted elements from y will be packed to the upper part of the group in the result vector.
465 in:
466 - base: int
467 - base: int
468 out:
469 - base: int
470 bits: 256|512
471- go: SaturateToUint16Concat
472 regexpTag: "convert"
473 asm: "VPACKUSDW"
474 addDoc: *satDocConcat
475 in:
476 - base: int
477 - base: int
478 out:
479 - base: uint
480 bits: 128
481- go: SaturateToUint16ConcatGrouped
482 regexpTag: "convert"
483 asm: "VPACKUSDW"
484 addDoc: *satDocConcatGrouped
485 in:
486 - base: int
487 - base: int
488 out:
489 - base: uint
490 bits: 256|512
491
492# low-part only conversions.
493# uint8->uint16
494- go: ExtendLo8ToUint16
495 regexpTag: "convert"
496 asm: "VPMOVZXBW"
497 in:
498 - *u8x16
499 out:
500 - *u16x8
501# int8->int16
502- go: ExtendLo8ToInt16
503 regexpTag: "convert"
504 asm: "VPMOVSXBW"
505 in:
506 - *i8x16
507 out:
508 - *i16x8
509# uint16->uint32
510- go: ExtendLo4ToUint32
511 regexpTag: "convert"
512 asm: "VPMOVZXWD"
513 in:
514 - *u16x8
515 out:
516 - *u32x4
517# int16->int32
518- go: ExtendLo4ToInt32
519 regexpTag: "convert"
520 asm: "VPMOVSXWD"
521 in:
522 - *i16x8
523 out:
524 - *i32x4
525# uint32 -> uint64
526- go: ExtendLo2ToUint64
527 regexpTag: "convert"
528 asm: "VPMOVZXDQ"
529 in:
530 - *u32x4
531 out:
532 - &u64x2
533 base: uint
534 elemBits: 64
535 bits: 128
536# int32 -> int64
537- go: ExtendLo2ToInt64
538 regexpTag: "convert"
539 asm: "VPMOVSXDQ"
540 in:
541 - *i32x4
542 out:
543 - &i64x2
544 base: int
545 elemBits: 64
546 bits: 128
547# uint16 -> uint64
548- go: ExtendLo2ToUint64
549 regexpTag: "convert"
550 asm: "VPMOVZXWQ"
551 in:
552 - *u16x8
553 out:
554 - *u64x2
555- go: ExtendLo4ToUint64
556 regexpTag: "convert"
557 asm: "VPMOVZXWQ"
558 in:
559 - *u16x8
560 out:
561 - *u64x4
562# int16 -> int64
563- go: ExtendLo2ToInt64
564 regexpTag: "convert"
565 asm: "VPMOVSXWQ"
566 in:
567 - *i16x8
568 out:
569 - *i64x2
570- go: ExtendLo4ToInt64
571 regexpTag: "convert"
572 asm: "VPMOVSXWQ"
573 in:
574 - *i16x8
575 out:
576 - *i64x4
577# uint8 -> uint32
578- go: ExtendLo4ToUint32
579 regexpTag: "convert"
580 asm: "VPMOVZXBD"
581 in:
582 - *u8x16
583 out:
584 - *u32x4
585- go: ExtendLo8ToUint32
586 regexpTag: "convert"
587 asm: "VPMOVZXBD"
588 in:
589 - *u8x16
590 out:
591 - *u32x8
592# int8 -> int32
593- go: ExtendLo4ToInt32
594 regexpTag: "convert"
595 asm: "VPMOVSXBD"
596 in:
597 - *i8x16
598 out:
599 - *i32x4
600- go: ExtendLo8ToInt32
601 regexpTag: "convert"
602 asm: "VPMOVSXBD"
603 in:
604 - *i8x16
605 out:
606 - *i32x8
607# uint8 -> uint64
608- go: ExtendLo2ToUint64
609 regexpTag: "convert"
610 asm: "VPMOVZXBQ"
611 in:
612 - *u8x16
613 out:
614 - *u64x2
615- go: ExtendLo4ToUint64
616 regexpTag: "convert"
617 asm: "VPMOVZXBQ"
618 in:
619 - *u8x16
620 out:
621 - *u64x4
622- go: ExtendLo8ToUint64
623 regexpTag: "convert"
624 asm: "VPMOVZXBQ"
625 in:
626 - *u8x16
627 out:
628 - *u64x8
629# int8 -> int64
630- go: ExtendLo2ToInt64
631 regexpTag: "convert"
632 asm: "VPMOVSXBQ"
633 in:
634 - *i8x16
635 out:
636 - *i64x2
637- go: ExtendLo4ToInt64
638 regexpTag: "convert"
639 asm: "VPMOVSXBQ"
640 in:
641 - *i8x16
642 out:
643 - *i64x4
644- go: ExtendLo8ToInt64
645 regexpTag: "convert"
646 asm: "VPMOVSXBQ"
647 in:
648 - *i8x16
649 out:
650 - *i64x8
View as plain text