3#include "native/config.h"
10namespace native::detail::arm_neon {
11 template<
class V, std::size_t... I>
13 std::index_sequence<I...>) noexcept {
14#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
18 if constexpr (
sizeof(V) == 16) {
19 auto raw = __builtin_bit_cast(uint8x16_t, value);
20 return __builtin_bit_cast(
21 V, __builtin_shufflevector(raw, raw, (15 - I)...));
28 return register_order(value, std::make_index_sequence<16>{});
33 template<
class V, std::size_t... I>
35#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
36 using result_type =
decltype(__builtin_shufflevector(low, low, I...));
38 asm(
"dup %0.2d, %1.d[0]" :
"=w"(result) :
"w"(low));
41 return register_order(__builtin_shufflevector(low, V{}, I...));
46 return low_register(low, std::make_index_sequence<2 *
sizeof(V) /
sizeof(low[0])>{});
50 if constexpr (
sizeof(R) ==
sizeof(
typename V::native_type))
51 return __builtin_bit_cast(R, value.to_native());
53 auto bytes = __builtin_bit_cast(uint8x16_t, value.to_native());
54 return __builtin_bit_cast(R, __builtin_shufflevector(bytes, bytes, 0, 1, 2, 3, 4, 5, 6, 7));
58 template<
class V,
class R>
60 if constexpr (
sizeof(R) ==
sizeof(
typename V::native_type))
61 return V::from_native(__builtin_bit_cast(
typename V::native_type, value));
63 auto bytes = __builtin_bit_cast(uint8x8_t, value);
64 return V::from_native(__builtin_bit_cast(
65 typename V::native_type, __builtin_shufflevector(bytes, uint8x8_t{}, 0, 1, 2, 3, 4, 5, 6,
66 7, 8, 9, 10, 11, 12, 13, 14, 15)));
71 auto left = register_order(a);
72 auto right = register_order(b);
74 asm volatile(
"sqadd %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
75 return register_order(result);
79 auto left = register_order(a);
80 auto right = register_order(b);
82 asm volatile(
"sqadd %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
83 return register_order(result);
87 auto left = register_order(a);
88 auto right = register_order(b);
90 asm volatile(
"sqadd %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
91 return register_order(result);
95 auto left = register_order(a);
96 auto right = register_order(b);
98 asm volatile(
"sqadd %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
99 return register_order(result);
103 auto left = register_order(a);
104 auto right = register_order(b);
106 asm volatile(
"sqadd %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
107 return register_order(result);
111 auto left = register_order(a);
112 auto right = register_order(b);
114 asm volatile(
"sqadd %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
115 return register_order(result);
119 auto left = register_order(a);
120 auto right = register_order(b);
122 asm volatile(
"sqadd %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
123 return register_order(result);
127 auto left = register_order(a);
128 auto right = register_order(b);
130 asm volatile(
"sqadd %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
131 return register_order(result);
135 auto left = register_order(a);
136 auto right = register_order(b);
138 asm volatile(
"uqadd %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
139 return register_order(result);
143 auto left = register_order(a);
144 auto right = register_order(b);
146 asm volatile(
"uqadd %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
147 return register_order(result);
151 auto left = register_order(a);
152 auto right = register_order(b);
154 asm volatile(
"uqadd %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
155 return register_order(result);
159 auto left = register_order(a);
160 auto right = register_order(b);
162 asm volatile(
"uqadd %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
163 return register_order(result);
167 auto left = register_order(a);
168 auto right = register_order(b);
170 asm volatile(
"uqadd %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
171 return register_order(result);
175 auto left = register_order(a);
176 auto right = register_order(b);
178 asm volatile(
"uqadd %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
179 return register_order(result);
183 auto left = register_order(a);
184 auto right = register_order(b);
186 asm volatile(
"uqadd %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
187 return register_order(result);
191 auto left = register_order(a);
192 auto right = register_order(b);
194 asm volatile(
"uqadd %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
195 return register_order(result);
199 auto left = register_order(a);
200 auto right = register_order(b);
202 asm volatile(
"sqsub %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
203 return register_order(result);
207 auto left = register_order(a);
208 auto right = register_order(b);
210 asm volatile(
"sqsub %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
211 return register_order(result);
215 auto left = register_order(a);
216 auto right = register_order(b);
218 asm volatile(
"sqsub %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
219 return register_order(result);
223 auto left = register_order(a);
224 auto right = register_order(b);
226 asm volatile(
"sqsub %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
227 return register_order(result);
231 auto left = register_order(a);
232 auto right = register_order(b);
234 asm volatile(
"sqsub %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
235 return register_order(result);
239 auto left = register_order(a);
240 auto right = register_order(b);
242 asm volatile(
"sqsub %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
243 return register_order(result);
247 auto left = register_order(a);
248 auto right = register_order(b);
250 asm volatile(
"sqsub %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
251 return register_order(result);
255 auto left = register_order(a);
256 auto right = register_order(b);
258 asm volatile(
"sqsub %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
259 return register_order(result);
263 auto left = register_order(a);
264 auto right = register_order(b);
266 asm volatile(
"uqsub %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
267 return register_order(result);
271 auto left = register_order(a);
272 auto right = register_order(b);
274 asm volatile(
"uqsub %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
275 return register_order(result);
279 auto left = register_order(a);
280 auto right = register_order(b);
282 asm volatile(
"uqsub %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
283 return register_order(result);
287 auto left = register_order(a);
288 auto right = register_order(b);
290 asm volatile(
"uqsub %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
291 return register_order(result);
295 auto left = register_order(a);
296 auto right = register_order(b);
298 asm volatile(
"uqsub %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
299 return register_order(result);
303 auto left = register_order(a);
304 auto right = register_order(b);
306 asm volatile(
"uqsub %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
307 return register_order(result);
311 auto left = register_order(a);
312 auto right = register_order(b);
314 asm volatile(
"uqsub %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
315 return register_order(result);
319 auto left = register_order(a);
320 auto right = register_order(b);
322 asm volatile(
"uqsub %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
323 return register_order(result);
327 auto left = register_order(a);
328 auto right = register_order(b);
330 asm volatile(
"sqdmulh %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
331 return register_order(result);
335 auto left = register_order(a);
336 auto right = register_order(b);
338 asm volatile(
"sqdmulh %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
339 return register_order(result);
343 auto left = register_order(a);
344 auto right = register_order(b);
346 asm volatile(
"sqdmulh %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
347 return register_order(result);
351 auto left = register_order(a);
352 auto right = register_order(b);
354 asm volatile(
"sqdmulh %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
355 return register_order(result);
359 auto left = register_order(a);
360 auto right = register_order(b);
362 asm volatile(
"sqrdmulh %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
363 return register_order(result);
367 auto left = register_order(a);
368 auto right = register_order(b);
370 asm volatile(
"sqrdmulh %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
371 return register_order(result);
375 auto left = register_order(a);
376 auto right = register_order(b);
378 asm volatile(
"sqrdmulh %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
379 return register_order(result);
383 auto left = register_order(a);
384 auto right = register_order(b);
386 asm volatile(
"sqrdmulh %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
387 return register_order(result);
391 auto left = register_order(a);
392 auto right = register_order(b);
394 asm volatile(
"sshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
395 return register_order(result);
399 auto left = register_order(a);
400 auto right = register_order(b);
402 asm volatile(
"sshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
403 return register_order(result);
407 auto left = register_order(a);
408 auto right = register_order(b);
410 asm volatile(
"sshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
411 return register_order(result);
415 auto left = register_order(a);
416 auto right = register_order(b);
418 asm volatile(
"sshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
419 return register_order(result);
423 auto left = register_order(a);
424 auto right = register_order(b);
426 asm volatile(
"sshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
427 return register_order(result);
431 auto left = register_order(a);
432 auto right = register_order(b);
434 asm volatile(
"sshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
435 return register_order(result);
439 auto left = register_order(a);
440 auto right = register_order(b);
442 asm volatile(
"sshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
443 return register_order(result);
447 auto left = register_order(a);
448 auto right = register_order(b);
450 asm volatile(
"sshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
451 return register_order(result);
455 auto left = register_order(a);
456 auto right = register_order(b);
458 asm volatile(
"srshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
459 return register_order(result);
463 auto left = register_order(a);
464 auto right = register_order(b);
466 asm volatile(
"srshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
467 return register_order(result);
471 auto left = register_order(a);
472 auto right = register_order(b);
474 asm volatile(
"srshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
475 return register_order(result);
479 auto left = register_order(a);
480 auto right = register_order(b);
482 asm volatile(
"srshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
483 return register_order(result);
487 auto left = register_order(a);
488 auto right = register_order(b);
490 asm volatile(
"srshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
491 return register_order(result);
495 auto left = register_order(a);
496 auto right = register_order(b);
498 asm volatile(
"srshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
499 return register_order(result);
503 auto left = register_order(a);
504 auto right = register_order(b);
506 asm volatile(
"srshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
507 return register_order(result);
511 auto left = register_order(a);
512 auto right = register_order(b);
514 asm volatile(
"srshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
515 return register_order(result);
519 auto left = register_order(a);
520 auto right = register_order(b);
522 asm volatile(
"sqshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
523 return register_order(result);
527 auto left = register_order(a);
528 auto right = register_order(b);
530 asm volatile(
"sqshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
531 return register_order(result);
535 auto left = register_order(a);
536 auto right = register_order(b);
538 asm volatile(
"sqshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
539 return register_order(result);
543 auto left = register_order(a);
544 auto right = register_order(b);
546 asm volatile(
"sqshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
547 return register_order(result);
551 auto left = register_order(a);
552 auto right = register_order(b);
554 asm volatile(
"sqshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
555 return register_order(result);
559 auto left = register_order(a);
560 auto right = register_order(b);
562 asm volatile(
"sqshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
563 return register_order(result);
567 auto left = register_order(a);
568 auto right = register_order(b);
570 asm volatile(
"sqshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
571 return register_order(result);
575 auto left = register_order(a);
576 auto right = register_order(b);
578 asm volatile(
"sqshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
579 return register_order(result);
583 auto left = register_order(a);
584 auto right = register_order(b);
586 asm volatile(
"sqrshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
587 return register_order(result);
591 auto left = register_order(a);
592 auto right = register_order(b);
594 asm volatile(
"sqrshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
595 return register_order(result);
599 auto left = register_order(a);
600 auto right = register_order(b);
602 asm volatile(
"sqrshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
603 return register_order(result);
607 auto left = register_order(a);
608 auto right = register_order(b);
610 asm volatile(
"sqrshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
611 return register_order(result);
615 auto left = register_order(a);
616 auto right = register_order(b);
618 asm volatile(
"sqrshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
619 return register_order(result);
623 auto left = register_order(a);
624 auto right = register_order(b);
626 asm volatile(
"sqrshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
627 return register_order(result);
631 auto left = register_order(a);
632 auto right = register_order(b);
634 asm volatile(
"sqrshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
635 return register_order(result);
639 auto left = register_order(a);
640 auto right = register_order(b);
642 asm volatile(
"sqrshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
643 return register_order(result);
647 auto left = register_order(a);
648 auto right = register_order(b);
650 asm volatile(
"ushl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
651 return register_order(result);
655 auto left = register_order(a);
656 auto right = register_order(b);
658 asm volatile(
"ushl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
659 return register_order(result);
663 auto left = register_order(a);
664 auto right = register_order(b);
666 asm volatile(
"ushl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
667 return register_order(result);
671 auto left = register_order(a);
672 auto right = register_order(b);
674 asm volatile(
"ushl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
675 return register_order(result);
679 auto left = register_order(a);
680 auto right = register_order(b);
682 asm volatile(
"ushl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
683 return register_order(result);
687 auto left = register_order(a);
688 auto right = register_order(b);
690 asm volatile(
"ushl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
691 return register_order(result);
695 auto left = register_order(a);
696 auto right = register_order(b);
698 asm volatile(
"ushl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
699 return register_order(result);
703 auto left = register_order(a);
704 auto right = register_order(b);
706 asm volatile(
"ushl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
707 return register_order(result);
711 auto left = register_order(a);
712 auto right = register_order(b);
714 asm volatile(
"urshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
715 return register_order(result);
719 auto left = register_order(a);
720 auto right = register_order(b);
722 asm volatile(
"urshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
723 return register_order(result);
727 auto left = register_order(a);
728 auto right = register_order(b);
730 asm volatile(
"urshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
731 return register_order(result);
735 auto left = register_order(a);
736 auto right = register_order(b);
738 asm volatile(
"urshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
739 return register_order(result);
743 auto left = register_order(a);
744 auto right = register_order(b);
746 asm volatile(
"urshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
747 return register_order(result);
751 auto left = register_order(a);
752 auto right = register_order(b);
754 asm volatile(
"urshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
755 return register_order(result);
759 auto left = register_order(a);
760 auto right = register_order(b);
762 asm volatile(
"urshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
763 return register_order(result);
767 auto left = register_order(a);
768 auto right = register_order(b);
770 asm volatile(
"urshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
771 return register_order(result);
775 auto left = register_order(a);
776 auto right = register_order(b);
778 asm volatile(
"uqshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
779 return register_order(result);
783 auto left = register_order(a);
784 auto right = register_order(b);
786 asm volatile(
"uqshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
787 return register_order(result);
791 auto left = register_order(a);
792 auto right = register_order(b);
794 asm volatile(
"uqshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
795 return register_order(result);
799 auto left = register_order(a);
800 auto right = register_order(b);
802 asm volatile(
"uqshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
803 return register_order(result);
807 auto left = register_order(a);
808 auto right = register_order(b);
810 asm volatile(
"uqshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
811 return register_order(result);
815 auto left = register_order(a);
816 auto right = register_order(b);
818 asm volatile(
"uqshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
819 return register_order(result);
823 auto left = register_order(a);
824 auto right = register_order(b);
826 asm volatile(
"uqshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
827 return register_order(result);
831 auto left = register_order(a);
832 auto right = register_order(b);
834 asm volatile(
"uqshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
835 return register_order(result);
839 auto left = register_order(a);
840 auto right = register_order(b);
842 asm volatile(
"uqrshl %0.8b, %1.8b, %2.8b" :
"=w"(result) :
"w"(left),
"w"(right));
843 return register_order(result);
847 auto left = register_order(a);
848 auto right = register_order(b);
850 asm volatile(
"uqrshl %0.16b, %1.16b, %2.16b" :
"=w"(result) :
"w"(left),
"w"(right));
851 return register_order(result);
855 auto left = register_order(a);
856 auto right = register_order(b);
858 asm volatile(
"uqrshl %0.4h, %1.4h, %2.4h" :
"=w"(result) :
"w"(left),
"w"(right));
859 return register_order(result);
863 auto left = register_order(a);
864 auto right = register_order(b);
866 asm volatile(
"uqrshl %0.8h, %1.8h, %2.8h" :
"=w"(result) :
"w"(left),
"w"(right));
867 return register_order(result);
871 auto left = register_order(a);
872 auto right = register_order(b);
874 asm volatile(
"uqrshl %0.2s, %1.2s, %2.2s" :
"=w"(result) :
"w"(left),
"w"(right));
875 return register_order(result);
879 auto left = register_order(a);
880 auto right = register_order(b);
882 asm volatile(
"uqrshl %0.4s, %1.4s, %2.4s" :
"=w"(result) :
"w"(left),
"w"(right));
883 return register_order(result);
887 auto left = register_order(a);
888 auto right = register_order(b);
890 asm volatile(
"uqrshl %d0, %d1, %d2" :
"=w"(result) :
"w"(left),
"w"(right));
891 return register_order(result);
895 auto left = register_order(a);
896 auto right = register_order(b);
898 asm volatile(
"uqrshl %0.2d, %1.2d, %2.2d" :
"=w"(result) :
"w"(left),
"w"(right));
899 return register_order(result);
903 auto source = register_order(a);
905 asm volatile(
"sqxtn %0.8b, %1.8h" :
"=w"(result) :
"w"(source));
906 return register_order(result);
910 auto result = low_register(low);
911 auto source = register_order(a);
912 asm volatile(
"sqxtn2 %0.16b, %1.8h" :
"+w"(result) :
"w"(source));
913 return register_order(result);
917 auto source = register_order(a);
919 asm volatile(
"sqxtn %0.4h, %1.4s" :
"=w"(result) :
"w"(source));
920 return register_order(result);
924 auto result = low_register(low);
925 auto source = register_order(a);
926 asm volatile(
"sqxtn2 %0.8h, %1.4s" :
"+w"(result) :
"w"(source));
927 return register_order(result);
931 auto source = register_order(a);
933 asm volatile(
"sqxtn %0.2s, %1.2d" :
"=w"(result) :
"w"(source));
934 return register_order(result);
938 auto result = low_register(low);
939 auto source = register_order(a);
940 asm volatile(
"sqxtn2 %0.4s, %1.2d" :
"+w"(result) :
"w"(source));
941 return register_order(result);
945 auto source = register_order(a);
947 asm volatile(
"uqxtn %0.8b, %1.8h" :
"=w"(result) :
"w"(source));
948 return register_order(result);
952 auto result = low_register(low);
953 auto source = register_order(a);
954 asm volatile(
"uqxtn2 %0.16b, %1.8h" :
"+w"(result) :
"w"(source));
955 return register_order(result);
959 auto source = register_order(a);
961 asm volatile(
"uqxtn %0.4h, %1.4s" :
"=w"(result) :
"w"(source));
962 return register_order(result);
966 auto result = low_register(low);
967 auto source = register_order(a);
968 asm volatile(
"uqxtn2 %0.8h, %1.4s" :
"+w"(result) :
"w"(source));
969 return register_order(result);
973 auto source = register_order(a);
975 asm volatile(
"uqxtn %0.2s, %1.2d" :
"=w"(result) :
"w"(source));
976 return register_order(result);
980 auto result = low_register(low);
981 auto source = register_order(a);
982 asm volatile(
"uqxtn2 %0.4s, %1.2d" :
"+w"(result) :
"w"(source));
983 return register_order(result);
987 auto source = register_order(a);
989 asm volatile(
"sqxtun %0.8b, %1.8h" :
"=w"(result) :
"w"(source));
990 return register_order(result);
994 auto result = low_register(low);
995 auto source = register_order(a);
996 asm volatile(
"sqxtun2 %0.16b, %1.8h" :
"+w"(result) :
"w"(source));
997 return register_order(result);
1001 auto source = register_order(a);
1003 asm volatile(
"sqxtun %0.4h, %1.4s" :
"=w"(result) :
"w"(source));
1004 return register_order(result);
1008 auto result = low_register(low);
1009 auto source = register_order(a);
1010 asm volatile(
"sqxtun2 %0.8h, %1.4s" :
"+w"(result) :
"w"(source));
1011 return register_order(result);
1015 auto source = register_order(a);
1017 asm volatile(
"sqxtun %0.2s, %1.2d" :
"=w"(result) :
"w"(source));
1018 return register_order(result);
1022 auto result = low_register(low);
1023 auto source = register_order(a);
1024 asm volatile(
"sqxtun2 %0.4s, %1.2d" :
"+w"(result) :
"w"(source));
1025 return register_order(result);
Compiler attributes for host code, with shader-safe shared modifiers.
#define native_inline
inline [[always_inline]]
#define native_target(x)
this indicates a required feature set for the current multiversioned function.