91 { \
92 SIMD_LL_SET1_EPI8(a) \
94 }
95
96#define SIMD_MM256_SET2_EPI8(a0, a1) \
97 { \
98 SIMD_LL_SET2_EPI8(a0, a1) \
99 , SIMD_LL_SET2_EPI8(a0, a1), SIMD_LL_SET2_EPI8(a0, a1), SIMD_LL_SET2_EPI8(a0, a1) \
100 }
101
102#define SIMD_MM256_SETR_EPI8( \
103 a0, \
104 a1, \
105 a2, \
106 a3, \
107 a4, \
108 a5, \
109 a6, \
110 a7, \
111 a8, \
112 a9, \
113 aa, \
114 ab, \
115 ac, \
116 ad, \
117 ae, \
118 af, \
119 b0, \
120 b1, \
121 b2, \
122 b3, \
123 b4, \
124 b5, \
125 b6, \
126 b7, \
127 b8, \
128 b9, \
129 ba, \
130 bb, \
131 bc, \
132 bd, \
133 be, \
134 bf) \
135 { \
136 SIMD_LL_SETR_EPI8(a0, a1, a2, a3, a4, a5, a6, a7) \
137 , SIMD_LL_SETR_EPI8(a8, a9, aa, ab, ac, ad, ae, af), SIMD_LL_SETR_EPI8(b0, b1, b2, b3, b4, b5, b6, b7), \
138 SIMD_LL_SETR_EPI8(b8, b9, ba, bb, bc, bd, be, bf) \
139 }
140
141#define SIMD_MM256_SET1_EPI16(a) \
142 { \
143 SIMD_LL_SET1_EPI16(a) \
144 , SIMD_LL_SET1_EPI16(a), SIMD_LL_SET1_EPI16(a), SIMD_LL_SET1_EPI16(a) \
145 }
146
147#define SIMD_MM256_SET2_EPI16(a0, a1) \
148 { \
149 SIMD_LL_SET2_EPI16(a0, a1) \
150 , SIMD_LL_SET2_EPI16(a0, a1), SIMD_LL_SET2_EPI16(a0, a1), SIMD_LL_SET2_EPI16(a0, a1) \
151 }
152
153#define SIMD_MM256_SETR_EPI16(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af) \
154 { \
155 SIMD_LL_SETR_EPI16(a0, a1, a2, a3) \
156 , SIMD_LL_SETR_EPI16(a4, a5, a6, a7), SIMD_LL_SETR_EPI16(a8, a9, aa, ab), SIMD_LL_SETR_EPI16(ac, ad, ae, af) \
157 }
158
159#define SIMD_MM256_SET1_EPI32(a) \
160 { \
161 SIMD_LL_SET1_EPI32(a) \
162 , SIMD_LL_SET1_EPI32(a), SIMD_LL_SET1_EPI32(a), SIMD_LL_SET1_EPI32(a) \
163 }
164
165#define SIMD_MM256_SET2_EPI32(a0, a1) \
166 { \
167 SIMD_LL_SET2_EPI32(a0, a1) \
168 , SIMD_LL_SET2_EPI32(a0, a1), SIMD_LL_SET2_EPI32(a0, a1), SIMD_LL_SET2_EPI32(a0, a1) \
169 }
170
171#define SIMD_MM256_SETR_EPI32(a0, a1, a2, a3, a4, a5, a6, a7) \
172 { \
173 SIMD_LL_SET2_EPI32(a0, a1) \
174 , SIMD_LL_SET2_EPI32(a2, a3), SIMD_LL_SET2_EPI32(a4, a5), SIMD_LL_SET2_EPI32(a6, a7) \
175 }
176
177const size_t A =
sizeof(__m256i);
178const size_t DA = 2 *
A;
179const size_t QA = 4 *
A;
180const size_t OA = 8 *
A;
181const size_t HA =
A / 2;
182
185
194
196
210
220
222 0x0,
223 0x3,
224 0x6,
225 0x9,
226 0xC,
227 0xF,
228 -1,
229 -1,
230 -1,
231 -1,
232 -1,
233 -1,
234 -1,
235 -1,
236 -1,
237 -1,
238 -1,
239 -1,
240 -1,
241 -1,
242 -1,
243 -1,
244 0x2,
245 0x5,
246 0x8,
247 0xB,
248 0xE,
249 -1,
250 -1,
251 -1,
252 -1,
253 -1);
255 -1,
256 -1,
257 -1,
258 -1,
259 -1,
260 -1,
261 -1,
262 -1,
263 -1,
264 -1,
265 -1,
266 0x1,
267 0x4,
268 0x7,
269 0xA,
270 0xD,
271 0x0,
272 0x3,
273 0x6,
274 0x9,
275 0xC,
276 0xF,
277 -1,
278 -1,
279 -1,
280 -1,
281 -1,
282 -1,
283 -1,
284 -1,
285 -1,
286 -1);
288 -1,
289 -1,
290 -1,
291 -1,
292 -1,
293 -1,
294 0x2,
295 0x5,
296 0x8,
297 0xB,
298 0xE,
299 -1,
300 -1,
301 -1,
302 -1,
303 -1,
304 -1,
305 -1,
306 -1,
307 -1,
308 -1,
309 -1,
310 -1,
311 -1,
312 -1,
313 -1,
314 -1,
315 0x1,
316 0x4,
317 0x7,
318 0xA,
319 0xD);
320
322 0x0,
323 0x2,
324 0x4,
325 0x6,
326 0x8,
327 0xa,
328 0xc,
329 0xe,
330 -1,
331 -1,
332 -1,
333 -1,
334 -1,
335 -1,
336 -1,
337 -1,
338 0x0,
339 0x2,
340 0x4,
341 0x6,
342 0x8,
343 0xa,
344 0xc,
345 0xe,
346 -1,
347 -1,
348 -1,
349 -1,
350 -1,
351 -1,
352 -1,
353 -1);
355 -1,
356 -1,
357 -1,
358 -1,
359 -1,
360 -1,
361 -1,
362 -1,
363 0x0,
364 0x2,
365 0x4,
366 0x6,
367 0x8,
368 0xa,
369 0xc,
370 0xe,
371 -1,
372 -1,
373 -1,
374 -1,
375 -1,
376 -1,
377 -1,
378 -1,
379 0x0,
380 0x2,
381 0x4,
382 0x6,
383 0x8,
384 0xa,
385 0xc,
386 0xe);
387
389 0x1,
390 0x5,
391 0x9,
392 0xd,
393 -1,
394 -1,
395 -1,
396 -1,
397 -1,
398 -1,
399 -1,
400 -1,
401 -1,
402 -1,
403 -1,
404 -1,
405 0x1,
406 0x5,
407 0x9,
408 0xd,
409 -1,
410 -1,
411 -1,
412 -1,
413 -1,
414 -1,
415 -1,
416 -1,
417 -1,
418 -1,
419 -1,
420 -1);
422 -1,
423 -1,
424 -1,
425 -1,
426 0x1,
427 0x5,
428 0x9,
429 0xd,
430 -1,
431 -1,
432 -1,
433 -1,
434 -1,
435 -1,
436 -1,
437 -1,
438 -1,
439 -1,
440 -1,
441 -1,
442 0x1,
443 0x5,
444 0x9,
445 0xd,
446 -1,
447 -1,
448 -1,
449 -1,
450 -1,
451 -1,
452 -1,
453 -1);
455 -1,
456 -1,
457 -1,
458 -1,
459 -1,
460 -1,
461 -1,
462 -1,
463 0x1,
464 0x5,
465 0x9,
466 0xd,
467 -1,
468 -1,
469 -1,
470 -1,
471 -1,
472 -1,
473 -1,
474 -1,
475 -1,
476 -1,
477 -1,
478 -1,
479 0x1,
480 0x5,
481 0x9,
482 0xd,
483 -1,
484 -1,
485 -1,
486 -1);
487
489 -1,
490 -1,
491 -1,
492 -1,
493 -1,
494 -1,
495 -1,
496 -1,
497 -1,
498 -1,
499 -1,
500 -1,
501 0x1,
502 0x5,
503 0x9,
504 0xd,
505 -1,
506 -1,
507 -1,
508 -1,
509 -1,
510 -1,
511 -1,
512 -1,
513 -1,
514 -1,
515 -1,
516 -1,
517 0x1,
518 0x5,
519 0x9,
520 0xd);
522 0x0,
523 0x0,
524 0x0,
525 0x0,
526 0x4,
527 0x0,
528 0x0,
529 0x0,
530 0x1,
531 0x0,
532 0x0,
533 0x0,
534 0x5,
535 0x0,
536 0x0,
537 0x0,
538 0x2,
539 0x0,
540 0x0,
541 0x0,
542 0x6,
543 0x0,
544 0x0,
545 0x0,
546 0x3,
547 0x0,
548 0x0,
549 0x0,
550 0x7,
551 0x0,
552 0x0,
553 0x0);
554
556 0x3,
557 0x7,
558 0xb,
559 0xf,
560 -1,
561 -1,
562 -1,
563 -1,
564 -1,
565 -1,
566 -1,
567 -1,
568 -1,
569 -1,
570 -1,
571 -1,
572 0x3,
573 0x7,
574 0xb,
575 0xf,
576 -1,
577 -1,
578 -1,
579 -1,
580 -1,
581 -1,
582 -1,
583 -1,
584 -1,
585 -1,
586 -1,
587 -1);
589 -1,
590 -1,
591 -1,
592 -1,
593 0x3,
594 0x7,
595 0xb,
596 0xf,
597 -1,
598 -1,
599 -1,
600 -1,
601 -1,
602 -1,
603 -1,
604 -1,
605 -1,
606 -1,
607 -1,
608 -1,
609 0x3,
610 0x7,
611 0xb,
612 0xf,
613 -1,
614 -1,
615 -1,
616 -1,
617 -1,
618 -1,
619 -1,
620 -1);
622 -1,
623 -1,
624 -1,
625 -1,
626 -1,
627 -1,
628 -1,
629 -1,
630 0x3,
631 0x7,
632 0xb,
633 0xf,
634 -1,
635 -1,
636 -1,
637 -1,
638 -1,
639 -1,
640 -1,
641 -1,
642 -1,
643 -1,
644 -1,
645 -1,
646 0x3,
647 0x7,
648 0xb,
649 0xf,
650 -1,
651 -1,
652 -1,
653 -1);
654
656 -1,
657 -1,
658 -1,
659 -1,
660 -1,
661 -1,
662 -1,
663 -1,
664 -1,
665 -1,
666 -1,
667 -1,
668 0x3,
669 0x7,
670 0xb,
671 0xf,
672 -1,
673 -1,
674 -1,
675 -1,
676 -1,
677 -1,
678 -1,
679 -1,
680 -1,
681 -1,
682 -1,
683 -1,
684 0x3,
685 0x7,
686 0xb,
687 0xf);
688
690 0x0,
691 -1,
692 -1,
693 0x1,
694 -1,
695 -1,
696 0x2,
697 -1,
698 -1,
699 0x3,
700 -1,
701 -1,
702 0x4,
703 -1,
704 -1,
705 0x5,
706 -1,
707 -1,
708 0x6,
709 -1,
710 -1,
711 0x7,
712 -1,
713 -1,
714 0x8,
715 -1,
716 -1,
717 0x9,
718 -1,
719 -1,
720 0xA,
721 -1);
723 -1,
724 0x3,
725 -1,
726 -1,
727 0x4,
728 -1,
729 -1,
730 0x5,
731 -1,
732 -1,
733 0x6,
734 -1,
735 -1,
736 0x7,
737 -1,
738 -1,
739 0x8,
740 -1,
741 -1,
742 0x9,
743 -1,
744 -1,
745 0xA,
746 -1,
747 -1,
748 0xB,
749 -1,
750 -1,
751 0xC,
752 -1,
753 -1,
754 0xD);
756 -1,
757 -1,
758 0x6,
759 -1,
760 -1,
761 0x7,
762 -1,
763 -1,
764 0x8,
765 -1,
766 -1,
767 0x9,
768 -1,
769 -1,
770 0xA,
771 -1,
772 -1,
773 0xB,
774 -1,
775 -1,
776 0xC,
777 -1,
778 -1,
779 0xD,
780 -1,
781 -1,
782 0xE,
783 -1,
784 -1,
785 0xF,
786 -1,
787 -1);
788
790 -1,
791 0x0,
792 -1,
793 -1,
794 0x1,
795 -1,
796 -1,
797 0x2,
798 -1,
799 -1,
800 0x3,
801 -1,
802 -1,
803 0x4,
804 -1,
805 -1,
806 0x5,
807 -1,
808 -1,
809 0x6,
810 -1,
811 -1,
812 0x7,
813 -1,
814 -1,
815 0x8,
816 -1,
817 -1,
818 0x9,
819 -1,
820 -1,
821 0xA);
823 -1,
824 -1,
825 0x3,
826 -1,
827 -1,
828 0x4,
829 -1,
830 -1,
831 0x5,
832 -1,
833 -1,
834 0x6,
835 -1,
836 -1,
837 0x7,
838 -1,
839 -1,
840 0x8,
841 -1,
842 -1,
843 0x9,
844 -1,
845 -1,
846 0xA,
847 -1,
848 -1,
849 0xB,
850 -1,
851 -1,
852 0xC,
853 -1,
854 -1);
856 0x5,
857 -1,
858 -1,
859 0x6,
860 -1,
861 -1,
862 0x7,
863 -1,
864 -1,
865 0x8,
866 -1,
867 -1,
868 0x9,
869 -1,
870 -1,
871 0xA,
872 -1,
873 -1,
874 0xB,
875 -1,
876 -1,
877 0xC,
878 -1,
879 -1,
880 0xD,
881 -1,
882 -1,
883 0xE,
884 -1,
885 -1,
886 0xF,
887 -1);
888
890 -1,
891 -1,
892 0x0,
893 -1,
894 -1,
895 0x1,
896 -1,
897 -1,
898 0x2,
899 -1,
900 -1,
901 0x3,
902 -1,
903 -1,
904 0x4,
905 -1,
906 -1,
907 0x5,
908 -1,
909 -1,
910 0x6,
911 -1,
912 -1,
913 0x7,
914 -1,
915 -1,
916 0x8,
917 -1,
918 -1,
919 0x9,
920 -1,
921 -1);
923 0x2,
924 -1,
925 -1,
926 0x3,
927 -1,
928 -1,
929 0x4,
930 -1,
931 -1,
932 0x5,
933 -1,
934 -1,
935 0x6,
936 -1,
937 -1,
938 0x7,
939 -1,
940 -1,
941 0x8,
942 -1,
943 -1,
944 0x9,
945 -1,
946 -1,
947 0xA,
948 -1,
949 -1,
950 0xB,
951 -1,
952 -1,
953 0xC,
954 -1);
956 -1,
957 0x5,
958 -1,
959 -1,
960 0x6,
961 -1,
962 -1,
963 0x7,
964 -1,
965 -1,
966 0x8,
967 -1,
968 -1,
969 0x9,
970 -1,
971 -1,
972 0xA,
973 -1,
974 -1,
975 0xB,
976 -1,
977 -1,
978 0xC,
979 -1,
980 -1,
981 0xD,
982 -1,
983 -1,
984 0xE,
985 -1,
986 -1,
987 0xF);
988
990 0x1,
991 0x4,
992 0x7,
993 0xA,
994 0xD,
995 -1,
996 -1,
997 -1,
998 -1,
999 -1,
1000 -1,
1001 -1,
1002 -1,
1003 -1,
1004 -1,
1005 -1,
1006 -1,
1007 -1,
1008 -1,
1009 -1,
1010 -1,
1011 0x0,
1012 0x3,
1013 0x6,
1014 0x9,
1015 0xC,
1016 0xF,
1017 -1,
1018 -1,
1019 -1,
1020 -1,
1021 -1);
1023 -1,
1024 -1,
1025 -1,
1026 -1,
1027 -1,
1028 -1,
1029 -1,
1030 -1,
1031 -1,
1032 -1,
1033 -1,
1034 0x2,
1035 0x5,
1036 0x8,
1037 0xB,
1038 0xE,
1039 0x1,
1040 0x4,
1041 0x7,
1042 0xA,
1043 0xD,
1044 -1,
1045 -1,
1046 -1,
1047 -1,
1048 -1,
1049 -1,
1050 -1,
1051 -1,
1052 -1,
1053 -1,
1054 -1);
1056 -1,
1057 -1,
1058 -1,
1059 -1,
1060 -1,
1061 0x0,
1062 0x3,
1063 0x6,
1064 0x9,
1065 0xC,
1066 0xF,
1067 -1,
1068 -1,
1069 -1,
1070 -1,
1071 -1,
1072 -1,
1073 -1,
1074 -1,
1075 -1,
1076 -1,
1077 -1,
1078 -1,
1079 -1,
1080 -1,
1081 -1,
1082 -1,
1083 0x2,
1084 0x5,
1085 0x8,
1086 0xB,
1087 0xE);
1088
1090 0x2,
1091 0x5,
1092 0x8,
1093 0xB,
1094 0xE,
1095 -1,
1096 -1,
1097 -1,
1098 -1,
1099 -1,
1100 -1,
1101 -1,
1102 -1,
1103 -1,
1104 -1,
1105 -1,
1106 -1,
1107 -1,
1108 -1,
1109 -1,
1110 -1,
1111 0x1,
1112 0x4,
1113 0x7,
1114 0xA,
1115 0xD,
1116 -1,
1117 -1,
1118 -1,
1119 -1,
1120 -1,
1121 -1);
1123 -1,
1124 -1,
1125 -1,
1126 -1,
1127 -1,
1128 -1,
1129 -1,
1130 -1,
1131 -1,
1132 -1,
1133 0x0,
1134 0x3,
1135 0x6,
1136 0x9,
1137 0xC,
1138 0xF,
1139 0x2,
1140 0x5,
1141 0x8,
1142 0xB,
1143 0xE,
1144 -1,
1145 -1,
1146 -1,
1147 -1,
1148 -1,
1149 -1,
1150 -1,
1151 -1,
1152 -1,
1153 -1,
1154 -1);
1156 -1,
1157 -1,
1158 -1,
1159 -1,
1160 -1,
1161 0x1,
1162 0x4,
1163 0x7,
1164 0xA,
1165 0xD,
1166 -1,
1167 -1,
1168 -1,
1169 -1,
1170 -1,
1171 -1,
1172 -1,
1173 -1,
1174 -1,
1175 -1,
1176 -1,
1177 -1,
1178 -1,
1179 -1,
1180 -1,
1181 -1,
1182 0x0,
1183 0x3,
1184 0x6,
1185 0x9,
1186 0xC,
1187 0xF);
1188
1200
1205
1206template <bool align>
1208
1209template <>
1210SIMD_INLINE __m256i Load<false>(
const __m256i *p) {
1211 return _mm256_loadu_si256(p);
1212}
1213
1214template <>
1216 return _mm256_load_si256(p);
1217}
1218
1220 return reinterpret_cast<void *>(((size_t)ptr) & ~(align - 1));
1221}
1222
1224 return ptr ==
AlignLo(ptr, align);
1225}
1226
1227template <bool align>
1229
1230template <>
1231SIMD_INLINE void Store<false>(__m256i *p, __m256i a) {
1232 _mm256_storeu_si256(p, a);
1233}
1234
1235template <>
1236SIMD_INLINE void Store<true>(__m256i *p, __m256i a) {
1237 _mm256_store_si256(p, a);
1238}
1239
1241 return _mm256_min_epi16(K16_00FF, _mm256_max_epi16(value, K_ZERO));
1242}
1243
1245 return _mm256_subs_epi16(y16, K16_Y_ADJUST);
1246}
1247
1249 return _mm256_subs_epi16(uv16, K16_UV_ADJUST);
1250}
1251
1253
1254
1255
1256
1257 return _mm256_srai_epi32(
1258 _mm256_add_epi32(_mm256_madd_epi16(y16_1, K16_YRGB_RT), _mm256_madd_epi16(v16_0, K16_VR_0)),
1259 YUV_TO_BGR_AVERAGING_SHIFT);
1260}
1261
1263
1264
1265
1267 AdjustedYuvToRed32(_mm256_unpacklo_epi16(y16, K16_0001), _mm256_unpacklo_epi16(v16, K_ZERO)),
1268 AdjustedYuvToRed32(_mm256_unpackhi_epi16(y16, K16_0001), _mm256_unpackhi_epi16(v16, K_ZERO))));
1269}
1270
1272 return _mm256_srai_epi32(
1273 _mm256_add_epi32(_mm256_madd_epi16(y16_1, K16_YRGB_RT), _mm256_madd_epi16(u16_v16, K16_UG_VG)),
1274 YUV_TO_BGR_AVERAGING_SHIFT);
1275}
1276
1281}
1282
1284 return _mm256_srai_epi32(
1285 _mm256_add_epi32(_mm256_madd_epi16(y16_1, K16_YRGB_RT), _mm256_madd_epi16(u16_0, K16_UB_0)),
1286 YUV_TO_BGR_AVERAGING_SHIFT);
1287}
1288
1291 AdjustedYuvToBlue32(_mm256_unpacklo_epi16(y16, K16_0001), _mm256_unpacklo_epi16(u16, K_ZERO)),
1292 AdjustedYuvToBlue32(_mm256_unpackhi_epi16(y16, K16_0001), _mm256_unpackhi_epi16(u16, K_ZERO))));
1293}
1294
1298
1299
1300
1301 return _mm256_packus_epi16(lo, hi);
1302}
1303
1306 (_mm256_unpacklo_epi8(y, K_ZERO)),
1308 AdjustUV16(_mm256_unpacklo_epi8(v, K_ZERO)));
1310 (_mm256_unpackhi_epi8(y, K_ZERO)),
1312 AdjustUV16(_mm256_unpackhi_epi8(v, K_ZERO)));
1313 return _mm256_packus_epi16(lo, hi);
1314}
1315
1319 return _mm256_packus_epi16(lo, hi);
1320}
1321
1322template <int index>
1323__m256i
InterleaveBgr(__m256i blue, __m256i green, __m256i red);
1324
1325template <>
1326SIMD_INLINE __m256i InterleaveBgr<0>(__m256i blue, __m256i green, __m256i red) {
1327 return _mm256_or_si256(
1328 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(blue, 0x44), K8_SHUFFLE_PERMUTED_BLUE_TO_BGR0),
1329 _mm256_or_si256(
1330 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(green, 0x44), K8_SHUFFLE_PERMUTED_GREEN_TO_BGR0),
1331 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(red, 0x44), K8_SHUFFLE_PERMUTED_RED_TO_BGR0)));
1332}
1333
1334template <>
1335SIMD_INLINE __m256i InterleaveBgr<1>(__m256i blue, __m256i green, __m256i red) {
1336 return _mm256_or_si256(
1337 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(blue, 0x99), K8_SHUFFLE_PERMUTED_BLUE_TO_BGR1),
1338 _mm256_or_si256(
1339 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(green, 0x99), K8_SHUFFLE_PERMUTED_GREEN_TO_BGR1),
1340 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(red, 0x99), K8_SHUFFLE_PERMUTED_RED_TO_BGR1)));
1341}
1342
1343template <>
1344SIMD_INLINE __m256i InterleaveBgr<2>(__m256i blue, __m256i green, __m256i red) {
1345 return _mm256_or_si256(
1346 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(blue, 0xEE), K8_SHUFFLE_PERMUTED_BLUE_TO_BGR2),
1347 _mm256_or_si256(
1348 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(green, 0xEE), K8_SHUFFLE_PERMUTED_GREEN_TO_BGR2),
1349 _mm256_shuffle_epi8(_mm256_permute4x64_epi64(red, 0xEE), K8_SHUFFLE_PERMUTED_RED_TO_BGR2)));
1350}
1351
1353 __m256i b0 = _mm256_shuffle_epi8(bgr[0], K8_SHUFFLE_BGR0_TO_BLUE);
1354 __m256i b2 = _mm256_shuffle_epi8(bgr[2], K8_SHUFFLE_BGR2_TO_BLUE);
1355 return _mm256_or_si256(
1356 _mm256_permute2x128_si256(b0, b2, 0x20),
1357 _mm256_or_si256(
1358 _mm256_shuffle_epi8(bgr[1], K8_SHUFFLE_BGR1_TO_BLUE), _mm256_permute2x128_si256(b0, b2, 0x31)));
1359}
1360
1362 __m256i g0 = _mm256_shuffle_epi8(bgr[0], K8_SHUFFLE_BGR0_TO_GREEN);
1363 __m256i g2 = _mm256_shuffle_epi8(bgr[2], K8_SHUFFLE_BGR2_TO_GREEN);
1364 return _mm256_or_si256(
1365 _mm256_permute2x128_si256(g0, g2, 0x20),
1366 _mm256_or_si256(
1367 _mm256_shuffle_epi8(bgr[1], K8_SHUFFLE_BGR1_TO_GREEN), _mm256_permute2x128_si256(g0, g2, 0x31)));
1368}
1369
1371 __m256i r0 = _mm256_shuffle_epi8(bgr[0], K8_SHUFFLE_BGR0_TO_RED);
1372 __m256i r2 = _mm256_shuffle_epi8(bgr[2], K8_SHUFFLE_BGR2_TO_RED);
1373 return _mm256_or_si256(
1374 _mm256_permute2x128_si256(r0, r2, 0x20),
1375 _mm256_or_si256(
1376 _mm256_shuffle_epi8(bgr[1], K8_SHUFFLE_BGR1_TO_RED), _mm256_permute2x128_si256(r0, r2, 0x31)));
1377}
1378
1379template <bool align>
1381 return _mm256_permute4x64_epi64(Load<align>(p), 0xD8);
1382}
1383
1384}
1385}
1386}
#define SIMD_MM256_SET1_EPI16(a)
#define SIMD_LL_SET1_EPI8(a)
#define SIMD_MM256_SET2_EPI8(a0, a1)
#define SIMD_MM256_SETR_EPI8( a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aa, ab, ac, ad, ae, af, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)
#define SIMD_MM256_SET1_EPI32(a)
#define SIMD_MM256_SET1_EPI8(a)
#define SIMD_MM256_SET2_EPI16(a0, a1)
const int U_TO_GREEN_WEIGHT
SIMD_INLINE __m256i BgrToGreen(__m256i bgr[3])
const __m256i K32_00000004
const __m256i K8_SHUFFLE_PERMUTED_RED_TO_BGR2
const __m256i K8_SHUFFLE_BGR1_TO_BLUE
const __m256i K16_YRGB_RT
const int Y_TO_RGB_WEIGHT
const __m256i K8_SHUFFLE_BGR1_TO_RED
SIMD_INLINE __m256i YuvToRed(__m256i y, __m256i v)
const __m256i K8_SHUFFLE_PERMUTED_BLUE_TO_BGR0
SIMD_INLINE __m256i SaturateI16ToU8(__m256i value)
const __m256i K32_00010000
const int YUV_TO_BGR_AVERAGING_SHIFT
SIMD_INLINE __m256i AdjustY16(__m256i y16)
const __m256i K8_SHUFFLE_PERMUTED_BLUE_TO_BGR1
SIMD_INLINE __m256i BgrToRed(__m256i bgr[3])
SIMD_INLINE __m256i YuvToBlue(__m256i y, __m256i u)
const __m256i K8_SHUFFLE_PERMUTED_GREEN_TO_BGR2
SIMD_INLINE __m256i AdjustUV16(__m256i uv16)
const __m256i K16_UV_ADJUST
SIMD_INLINE __m256i AdjustedYuvToBlue16(__m256i y16, __m256i u16)
const __m256i K32_00000008
const int V_TO_RED_WEIGHT
const __m256i K8_SHUFFLE_PERMUTED_BLUE_TO_BGR2
SIMD_INLINE __m256i AdjustedYuvToRed16(__m256i y16, __m256i v16)
const __m256i K32_00000002
SIMD_INLINE void Store(__m256i *p, __m256i a)
SIMD_INLINE __m256i AdjustedYuvToBlue32(__m256i y16_1, __m256i u16_0)
const __m256i K8_SHUFFLE_BGR0_TO_RED
const int V_TO_GREEN_WEIGHT
SIMD_INLINE __m256i AdjustedYuvToGreen32(__m256i y16_1, __m256i u16_v16)
const __m256i K8_SHUFFLE_BGR2_TO_RED
const __m256i K16_Y_ADJUST
SIMD_INLINE __m256i AdjustedYuvToGreen16(__m256i y16, __m256i u16, __m256i v16)
const __m256i K8_SHUFFLE_BGR0_TO_BLUE
const __m256i K8_SHUFFLE_BGR2_TO_GREEN
SIMD_INLINE void * AlignLo(const void *ptr, size_t align)
SIMD_INLINE __m256i BgrToBlue(__m256i bgr[3])
const int YUV_TO_BGR_ROUND_TERM
const __m256i K8_SHUFFLE_PERMUTED_RED_TO_BGR1
SIMD_INLINE __m256i AdjustedYuvToRed32(__m256i y16_1, __m256i v16_0)
const int U_TO_BLUE_WEIGHT
const __m256i K8_SHUFFLE_PERMUTED_RED_TO_BGR0
__m256i InterleaveBgr(__m256i blue, __m256i green, __m256i red)
const __m256i K32_01000000
SIMD_INLINE __m256i YuvToGreen(__m256i y, __m256i u, __m256i v)
const __m256i K8_SHUFFLE_BGR1_TO_GREEN
const __m256i K8_SHUFFLE_PERMUTED_GREEN_TO_BGR1
const __m256i K32_00000001
const __m256i K32_0000FFFF
const __m256i K8_SHUFFLE_PERMUTED_GREEN_TO_BGR0
SIMD_INLINE __m256i Load(const __m256i *p)
const __m256i K32_000000FF
const __m256i K8_SHUFFLE_BGR0_TO_GREEN
SIMD_INLINE __m256i LoadPermuted(const __m256i *p)
const __m256i K32_FFFFFF00
const __m256i K8_SHUFFLE_BGR2_TO_BLUE
SIMD_INLINE bool Aligned(const void *ptr, size_t align=sizeof(__m256))