fork download
  1. #include <emmintrin.h>
  2. #include <tmmintrin.h>
  3.  
  4. #define AZI_FMT_RGB_P16 0x22272
  5. #define AZI_FMT_RGBA_I8 0x3210F4
  6. #define AZI_FMT_RGBA_I16 0x6420F8
  7.  
  8. typedef struct azi_image {
  9. unsigned int width, height, format;
  10. union {
  11. unsigned short int* pixels;
  12. unsigned int* rgba;
  13. };
  14. } azi_image;
  15.  
  16. #define SET16(a, b) a = (__v8hu)_mm_setr_epi16(b, b, b, b, b, b, b, b)
  17. #define LOAD(a, b) a = (__v8hu)_mm_load_si128((__m128i*)(b))
  18. #define UPLO(a, b) a = (__v8hu)_mm_unpacklo_epi8((__m128i)b, (__m128i)regZero)
  19. #define UPHI(a, b) a = (__v8hu)_mm_unpackhi_epi8((__m128i)b, (__m128i)regZero)
  20. #define ADD(a, b) a = (__v8hu)_mm_add_epi16((__m128i)a, (__m128i)b)
  21. #define MUL(a, b) a = (__v8hu)_mm_mullo_epi16((__m128i)a, (__m128i)b)
  22. #define SRL16I(a, b) a = (__v8hu)_mm_srli_epi16((__m128i)a, (__m128i)b);
  23.  
  24. void azi_rgba_pr_fir3_line_sse2(azi_image* image,
  25. unsigned char* data,
  26. double src_left,
  27. double src_top,
  28. double src_right,
  29. double src_bottom,
  30. double dst_left,
  31. double dst_top,
  32. double scale,
  33. int width)
  34. {
  35. int dst_left_int = ceil(dst_left);
  36. int dst_right_int = floor(dst_left + scale * (src_right - src_left) + 0.1);
  37. int dst_top_int = ceil(dst_top);
  38. int dst_bottom_int = floor(dst_top + scale * (src_bottom - src_top) + 0.1);
  39.  
  40. long long src_fixp_x_begin = src_left * 0x100000000l;
  41. long long src_fixp_y = src_top * 0x100000000l;
  42. long long src_step = 0x100000000l / scale;
  43.  
  44. if(src_step * (dst_bottom_int - dst_top_int) >> 32 >= image->height)
  45. src_step--;
  46. else if(src_step * (dst_right_int - dst_left_int) >> 32 >= image->width)
  47. src_step--;
  48.  
  49. int linesize = 4 * width;
  50. data += linesize * dst_top_int;
  51.  
  52. int line_pitch = (image->width - 1 | 3) + 1;
  53. int x4begin = src_fixp_x_begin >> 34 << 2;
  54. unsigned int* line0 = image->rgba + ((int)src_top * line_pitch);
  55. unsigned int *line1 = line0, *line2 = line0, *line3 = line0;
  56.  
  57. // MM registers
  58. __v8hu regX, regY, regZero, reg0, reg1, regK0, regK1, regK2, regK3, regS, regKC, regKP, reg2, reg3, regLC, regLI;
  59.  
  60. SET16(regZero, 0);
  61.  
  62. double flK0;
  63. if(src_step >= 0x300000000) {
  64. flK0 = 0.0;
  65. } else if(src_step <= 0x180000000) {
  66. flK0 = 1.0;
  67. } else {
  68. flK0 = (0x300000000 - src_step) / (double)0x180000000;
  69. // flK0 = sqrt(flK0);
  70. }
  71. double flK1 = 0.5 * (1. - flK0);
  72.  
  73. short shKP = 256. * flK1 + 0.5;
  74. short shKC = 256 - shKP - shKP; // corrected
  75.  
  76. SET16(regKC, shKC);
  77. SET16(regKP, shKP);
  78.  
  79. for(int y = src_top; y < src_bottom; y++) {
  80. long long src_fixp_x = src_fixp_x_begin;
  81. int dst_x = dst_left_int;
  82.  
  83. int r = src_right;
  84. for(int x = r; x < (r - 1 | 3) + 1; x++)
  85. line0[x] = line0[r - 1];
  86.  
  87. if(src_fixp_y >> 32 == y) {
  88.  
  89. double flKV = (double)(src_fixp_y & 0xFFFFFFFFll) / 0x100000000ll;
  90.  
  91. double k0kV = flK0 * flKV, k1kV = flK1 * flKV, k0 = k1kV, k1 = k0kV + flK1 - k1kV, k2 = k1kV + flK0 - k0kV,
  92. k3 = flK1 - k1kV;
  93.  
  94. short shK0 = 256. * k0 + 0.5, shK1 = 256. * k1 + 0.5, shK2 = 256. * k2 + 0.5, shK3 = 256. * k3 + 0.5;
  95. shK1 = 256 - shK0 - shK2 - shK3; // corrected
  96.  
  97. SET16(regK0, shK0);
  98. SET16(regK1, shK1);
  99. SET16(regK2, shK2);
  100. SET16(regK3, shK3);
  101.  
  102. LOAD(regLC, line0 + x4begin);
  103. UPLO(regLC, regLC);
  104. regLI = _mm_slli_si128(regLC, 8);
  105. regLI = _mm_srli_si128(regLI, 8);
  106. regLC = _mm_slli_epi16(regLC, 8);
  107.  
  108. for(int x = x4begin; x < src_right; x += 4) {
  109.  
  110. // VERTICAL FILTERING
  111. LOAD(regX, line0 + x);
  112. UPLO(reg0, regX);
  113. MUL(reg0, regK0);
  114. UPHI(reg1, regX);
  115. MUL(reg1, regK0);
  116.  
  117. LOAD(regX, line1 + x);
  118. UPLO(regY, regX);
  119. MUL(regY, regK1);
  120. ADD(reg0, regY);
  121. UPHI(regY, regX);
  122. MUL(regY, regK1);
  123. ADD(reg1, regY);
  124.  
  125. LOAD(regX, line2 + x);
  126. UPLO(regY, regX);
  127. MUL(regY, regK2);
  128. ADD(reg0, regY);
  129. UPHI(regY, regX);
  130. MUL(regY, regK2);
  131. ADD(reg1, regY);
  132.  
  133. LOAD(regX, line3 + x);
  134. UPLO(regY, regX);
  135. MUL(regY, regK3);
  136. ADD(reg0, regY);
  137. UPHI(regY, regX);
  138. MUL(regY, regK3);
  139. ADD(reg1, regY);
  140.  
  141. // SRL16I(reg0, 8);
  142. // SRL16I(reg1, 8);
  143.  
  144. // vertically filtered 4 pixels in this registers now
  145.  
  146. // !!! use extract and insert intrinsics?
  147.  
  148. regX = reg0;
  149. reg2 = _mm_slli_si128(reg0, 8);
  150. reg3 = _mm_slli_si128(reg1, 8);
  151. regX = _mm_srli_si128(regX, 8);
  152.  
  153. reg3 = _mm_or_si128(reg3, regX);
  154.  
  155. regX = regLC;
  156.  
  157. // [regX, reg0] shifted 2 now
  158.  
  159. regLC = _mm_srli_si128(regLC, 8);
  160. reg2 = _mm_or_si128(reg2, regLC);
  161.  
  162. // [reg2, reg3] shifted 1 now
  163.  
  164. regLC = reg1; // remembered next regLC
  165.  
  166. // [reg0, reg1] unshifted
  167. // [regX, reg0] shifted 2
  168. // [reg2, reg3] shifted 1
  169. reg0 = _mm_srli_epi16(reg0, 8);
  170. reg1 = _mm_srli_epi16(reg1, 8);
  171. reg2 = _mm_srli_epi16(reg2, 8);
  172. reg3 = _mm_srli_epi16(reg3, 8);
  173. regX = _mm_srli_epi16(regX, 8);
  174.  
  175. reg1 = _mm_add_epi16(reg1, reg0);
  176. reg0 = _mm_add_epi16(reg0, regX);
  177.  
  178. reg0 = _mm_mullo_epi16(reg0, regKP);
  179. reg1 = _mm_mullo_epi16(reg1, regKP);
  180.  
  181. reg2 = _mm_mullo_epi16(reg2, regKC);
  182. reg3 = _mm_mullo_epi16(reg3, regKC);
  183.  
  184. reg2 = _mm_add_epi16(reg0, reg2);
  185. reg3 = _mm_add_epi16(reg1, reg3);
  186.  
  187. // [reg2, reg3] our result
  188.  
  189. reg2 = _mm_srli_epi16(reg2, 8);
  190. reg3 = _mm_srli_epi16(reg3, 8);
  191.  
  192. while(src_fixp_x >> 34 == x >> 2) {
  193.  
  194. int index = (src_fixp_x >> 32) - x;
  195.  
  196. switch(index) {
  197. case 0:
  198. reg0 = _mm_slli_si128(reg2, 8);
  199. reg0 = _mm_or_si128(reg0, regLI);
  200. break;
  201. case 1:
  202. reg0 = reg2;
  203. break;
  204. case 2:
  205. reg0 = _mm_srli_si128(reg2, 8);
  206. reg1 = _mm_slli_si128(reg3, 8);
  207. reg0 = _mm_or_si128(reg0, reg1);
  208. break;
  209. case 3:
  210. reg0 = reg3;
  211. break;
  212. }
  213.  
  214. unsigned long long llKI = (src_fixp_x >> 24) & 0xFF;
  215. unsigned long long llK1 = 256 - llKI;
  216. llKI |= llKI << 16;
  217. llKI |= llKI << 32;
  218. llK1 |= llK1 << 16;
  219. llK1 |= llK1 << 32;
  220.  
  221. regX = _mm_cvtsi64_si128(llKI);
  222. regY = _mm_cvtsi64_si128(llK1);
  223. regX = _mm_slli_si128(regX, 8);
  224. reg1 = _mm_or_si128(regX, regY);
  225.  
  226. reg0 = _mm_mullo_epi16(reg0, reg1);
  227. reg1 = _mm_srli_si128(reg0, 8);
  228. reg0 = _mm_add_epi16(reg0, reg1);
  229.  
  230. /*/ alpha blending
  231.   unsigned long d = *((unsigned int*)(data + dst_x * 4));
  232.   reg1 = _mm_cvtsi64_si128(d);
  233.   reg1 = _mm_unpacklo_epi8(reg1, regZero);
  234.   unsigned long alpha = _mm_cvtsi128_si64(reg0);
  235.   alpha = alpha >> 48 & 0xFFFF;
  236.   alpha = alpha * 65536 / 65280 / 256;
  237.   unsigned long not_alpha = 256 - alpha;
  238.   alpha |= alpha << 16;
  239.   alpha |= alpha << 32;
  240.   not_alpha |= not_alpha << 16;
  241.   not_alpha |= not_alpha << 32;
  242.   regX = _mm_cvtsi64_si128(alpha);
  243.   regY = _mm_cvtsi64_si128(not_alpha);
  244.   //
  245.   reg0 = _mm_srli_epi16(reg0, 8);
  246.   reg0 = _mm_mullo_epi16(reg0, regX);
  247.   reg1 = _mm_mullo_epi16(reg1, regY);
  248.   reg0 = _mm_add_epi16(reg0, reg1);
  249.   */
  250. reg0 = _mm_srli_epi16(reg0, 8);
  251. //*
  252.  
  253. // reg0 = _mm_srli_epi16(reg0, 8);
  254. reg0 = _mm_packus_epi16(reg0, reg0);
  255.  
  256. unsigned int color = _mm_cvtsi128_si32(reg0);
  257. *((unsigned int*)(data + dst_x * 4)) = color | 0xFF000000u;
  258. //*((unsigned int*)(data + dst_x * 4)) = 0x80808080u;
  259.  
  260. /*if(color < 0xFF000000u) {
  261.   printf("color 0x%8.8X\n", color);
  262.   return;
  263.   }*/
  264.  
  265. dst_x++;
  266. src_fixp_x += src_step;
  267. }
  268. regLI = _mm_srli_si128(reg3, 8);
  269. }
  270. }
  271. // break;
  272. line3 = line2;
  273. line2 = line1;
  274. line1 = line0;
  275. line0 += line_pitch;
  276. if(src_fixp_y >> 32 > y)
  277. continue;
  278. src_fixp_y += src_step;
  279. data += linesize;
  280. }
  281. }
  282.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.c: In function ‘azi_rgba_pr_fir3_line_sse2’:
prog.c:35:24: warning: implicit declaration of function ‘ceil’ [-Wimplicit-function-declaration]
     int dst_left_int = ceil(dst_left);
                        ^~~~
prog.c:35:24: warning: incompatible implicit declaration of built-in function ‘ceil’
prog.c:35:24: note: include ‘<math.h>’ or provide a declaration of ‘ceil’
prog.c:3:1:
+#include <math.h>
 
prog.c:35:24:
     int dst_left_int = ceil(dst_left);
                        ^~~~
prog.c:36:25: warning: implicit declaration of function ‘floor’ [-Wimplicit-function-declaration]
     int dst_right_int = floor(dst_left + scale * (src_right - src_left) + 0.1);
                         ^~~~~
prog.c:36:25: warning: incompatible implicit declaration of built-in function ‘floor’
prog.c:36:25: note: include ‘<math.h>’ or provide a declaration of ‘floor’
prog.c:52:36: warning: suggest parentheses around arithmetic in operand of ‘|’ [-Wparentheses]
     int line_pitch = (image->width - 1 | 3) + 1;
                       ~~~~~~~~~~~~~^~~
prog.c:84:31: warning: suggest parentheses around arithmetic in operand of ‘|’ [-Wparentheses]
         for(int x = r; x < (r - 1 | 3) + 1; x++)
                             ~~^~~
prog.c:104:13: note: use -flax-vector-conversions to permit conversions between vectors with differing element types or numbers of subparts
             regLI = _mm_slli_si128(regLC, 8);
             ^~~~~
prog.c:104:36: error: incompatible type for argument 1 of ‘_mm_slli_si128’
             regLI = _mm_slli_si128(regLC, 8);
                                    ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1191:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:105:36: error: incompatible type for argument 1 of ‘_mm_srli_si128’
             regLI = _mm_srli_si128(regLI, 8);
                                    ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1185:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:106:36: error: incompatible type for argument 1 of ‘_mm_slli_epi16’
             regLC = _mm_slli_epi16(regLC, 8);
                                    ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1142:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:149:39: error: incompatible type for argument 1 of ‘_mm_slli_si128’
                 reg2 = _mm_slli_si128(reg0, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1191:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:150:39: error: incompatible type for argument 1 of ‘_mm_slli_si128’
                 reg3 = _mm_slli_si128(reg1, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1191:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:151:39: error: incompatible type for argument 1 of ‘_mm_srli_si128’
                 regX = _mm_srli_si128(regX, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1185:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:153:37: error: incompatible type for argument 1 of ‘_mm_or_si128’
                 reg3 = _mm_or_si128(reg3, regX);
                                     ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:23: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
               ~~~~~~~~^~~
prog.c:153:43: error: incompatible type for argument 2 of ‘_mm_or_si128’
                 reg3 = _mm_or_si128(reg3, regX);
                                           ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:36: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
                            ~~~~~~~~^~~
prog.c:159:40: error: incompatible type for argument 1 of ‘_mm_srli_si128’
                 regLC = _mm_srli_si128(regLC, 8);
                                        ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1185:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:160:37: error: incompatible type for argument 1 of ‘_mm_or_si128’
                 reg2 = _mm_or_si128(reg2, regLC);
                                     ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:23: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
               ~~~~~~~~^~~
prog.c:160:43: error: incompatible type for argument 2 of ‘_mm_or_si128’
                 reg2 = _mm_or_si128(reg2, regLC);
                                           ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:36: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
                            ~~~~~~~~^~~
prog.c:169:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 reg0 = _mm_srli_epi16(reg0, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:170:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 reg1 = _mm_srli_epi16(reg1, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:171:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 reg2 = _mm_srli_epi16(reg2, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:172:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 reg3 = _mm_srli_epi16(reg3, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:173:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 regX = _mm_srli_epi16(regX, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:175:38: error: incompatible type for argument 1 of ‘_mm_add_epi16’
                 reg1 = _mm_add_epi16(reg1, reg0);
                                      ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:24: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                ~~~~~~~~^~~
prog.c:175:44: error: incompatible type for argument 2 of ‘_mm_add_epi16’
                 reg1 = _mm_add_epi16(reg1, reg0);
                                            ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:37: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                             ~~~~~~~~^~~
prog.c:176:38: error: incompatible type for argument 1 of ‘_mm_add_epi16’
                 reg0 = _mm_add_epi16(reg0, regX);
                                      ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:24: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                ~~~~~~~~^~~
prog.c:176:44: error: incompatible type for argument 2 of ‘_mm_add_epi16’
                 reg0 = _mm_add_epi16(reg0, regX);
                                            ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:37: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                             ~~~~~~~~^~~
prog.c:178:40: error: incompatible type for argument 1 of ‘_mm_mullo_epi16’
                 reg0 = _mm_mullo_epi16(reg0, regKP);
                                        ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:26: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                  ~~~~~~~~^~~
prog.c:178:46: error: incompatible type for argument 2 of ‘_mm_mullo_epi16’
                 reg0 = _mm_mullo_epi16(reg0, regKP);
                                              ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:39: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                               ~~~~~~~~^~~
prog.c:179:40: error: incompatible type for argument 1 of ‘_mm_mullo_epi16’
                 reg1 = _mm_mullo_epi16(reg1, regKP);
                                        ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:26: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                  ~~~~~~~~^~~
prog.c:179:46: error: incompatible type for argument 2 of ‘_mm_mullo_epi16’
                 reg1 = _mm_mullo_epi16(reg1, regKP);
                                              ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:39: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                               ~~~~~~~~^~~
prog.c:181:40: error: incompatible type for argument 1 of ‘_mm_mullo_epi16’
                 reg2 = _mm_mullo_epi16(reg2, regKC);
                                        ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:26: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                  ~~~~~~~~^~~
prog.c:181:46: error: incompatible type for argument 2 of ‘_mm_mullo_epi16’
                 reg2 = _mm_mullo_epi16(reg2, regKC);
                                              ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:39: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                               ~~~~~~~~^~~
prog.c:182:40: error: incompatible type for argument 1 of ‘_mm_mullo_epi16’
                 reg3 = _mm_mullo_epi16(reg3, regKC);
                                        ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:26: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                  ~~~~~~~~^~~
prog.c:182:46: error: incompatible type for argument 2 of ‘_mm_mullo_epi16’
                 reg3 = _mm_mullo_epi16(reg3, regKC);
                                              ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:39: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                               ~~~~~~~~^~~
prog.c:184:38: error: incompatible type for argument 1 of ‘_mm_add_epi16’
                 reg2 = _mm_add_epi16(reg0, reg2);
                                      ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:24: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                ~~~~~~~~^~~
prog.c:184:44: error: incompatible type for argument 2 of ‘_mm_add_epi16’
                 reg2 = _mm_add_epi16(reg0, reg2);
                                            ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:37: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                             ~~~~~~~~^~~
prog.c:185:38: error: incompatible type for argument 1 of ‘_mm_add_epi16’
                 reg3 = _mm_add_epi16(reg1, reg3);
                                      ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:24: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                ~~~~~~~~^~~
prog.c:185:44: error: incompatible type for argument 2 of ‘_mm_add_epi16’
                 reg3 = _mm_add_epi16(reg1, reg3);
                                            ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:37: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                             ~~~~~~~~^~~
prog.c:189:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 reg2 = _mm_srli_epi16(reg2, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:190:39: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                 reg3 = _mm_srli_epi16(reg3, 8);
                                       ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:198:47: error: incompatible type for argument 1 of ‘_mm_slli_si128’
                         reg0 = _mm_slli_si128(reg2, 8);
                                               ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1191:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:199:45: error: incompatible type for argument 1 of ‘_mm_or_si128’
                         reg0 = _mm_or_si128(reg0, regLI);
                                             ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:23: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
               ~~~~~~~~^~~
prog.c:199:51: error: incompatible type for argument 2 of ‘_mm_or_si128’
                         reg0 = _mm_or_si128(reg0, regLI);
                                                   ^~~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:36: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
                            ~~~~~~~~^~~
prog.c:205:47: error: incompatible type for argument 1 of ‘_mm_srli_si128’
                         reg0 = _mm_srli_si128(reg2, 8);
                                               ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1185:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:206:47: error: incompatible type for argument 1 of ‘_mm_slli_si128’
                         reg1 = _mm_slli_si128(reg3, 8);
                                               ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1191:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:207:45: error: incompatible type for argument 1 of ‘_mm_or_si128’
                         reg0 = _mm_or_si128(reg0, reg1);
                                             ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:23: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
               ~~~~~~~~^~~
prog.c:207:51: error: incompatible type for argument 2 of ‘_mm_or_si128’
                         reg0 = _mm_or_si128(reg0, reg1);
                                                   ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:36: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
                            ~~~~~~~~^~~
prog.c:221:26: error: incompatible types when assigning to type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’} from type ‘__m128i’ {aka ‘__vector(2) long long int’}
                     regX = _mm_cvtsi64_si128(llKI);
                          ^
prog.c:222:26: error: incompatible types when assigning to type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’} from type ‘__m128i’ {aka ‘__vector(2) long long int’}
                     regY = _mm_cvtsi64_si128(llK1);
                          ^
prog.c:223:43: error: incompatible type for argument 1 of ‘_mm_slli_si128’
                     regX = _mm_slli_si128(regX, 8);
                                           ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1191:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_slli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:224:41: error: incompatible type for argument 1 of ‘_mm_or_si128’
                     reg1 = _mm_or_si128(regX, regY);
                                         ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:23: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
               ~~~~~~~~^~~
prog.c:224:47: error: incompatible type for argument 2 of ‘_mm_or_si128’
                     reg1 = _mm_or_si128(regX, regY);
                                               ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1285:36: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_or_si128 (__m128i __A, __m128i __B)
                            ~~~~~~~~^~~
prog.c:226:44: error: incompatible type for argument 1 of ‘_mm_mullo_epi16’
                     reg0 = _mm_mullo_epi16(reg0, reg1);
                                            ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:26: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                  ~~~~~~~~^~~
prog.c:226:50: error: incompatible type for argument 2 of ‘_mm_mullo_epi16’
                     reg0 = _mm_mullo_epi16(reg0, reg1);
                                                  ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1124:39: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_mullo_epi16 (__m128i __A, __m128i __B)
                               ~~~~~~~~^~~
prog.c:227:43: error: incompatible type for argument 1 of ‘_mm_srli_si128’
                     reg1 = _mm_srli_si128(reg0, 8);
                                           ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1185:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:228:42: error: incompatible type for argument 1 of ‘_mm_add_epi16’
                     reg0 = _mm_add_epi16(reg0, reg1);
                                          ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:24: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                ~~~~~~~~^~~
prog.c:228:48: error: incompatible type for argument 2 of ‘_mm_add_epi16’
                     reg0 = _mm_add_epi16(reg0, reg1);
                                                ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1022:37: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_add_epi16 (__m128i __A, __m128i __B)
                             ~~~~~~~~^~~
prog.c:250:43: error: incompatible type for argument 1 of ‘_mm_srli_epi16’
                     reg0 = _mm_srli_epi16(reg0, 8);
                                           ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1207:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_epi16 (__m128i __A, int __B)
                 ~~~~~~~~^~~
prog.c:254:45: error: incompatible type for argument 1 of ‘_mm_packus_epi16’
                     reg0 = _mm_packus_epi16(reg0, reg0);
                                             ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:962:27: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_packus_epi16 (__m128i __A, __m128i __B)
                   ~~~~~~~~^~~
prog.c:254:51: error: incompatible type for argument 2 of ‘_mm_packus_epi16’
                     reg0 = _mm_packus_epi16(reg0, reg0);
                                                   ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:962:40: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_packus_epi16 (__m128i __A, __m128i __B)
                                ~~~~~~~~^~~
prog.c:256:60: error: incompatible type for argument 1 of ‘_mm_cvtsi128_si32’
                     unsigned int color = _mm_cvtsi128_si32(reg0);
                                                            ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:224:28: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_cvtsi128_si32 (__m128i __A)
                    ~~~~~~~~^~~
prog.c:268:40: error: incompatible type for argument 1 of ‘_mm_srli_si128’
                 regLI = _mm_srli_si128(reg3, 8);
                                        ^~~~
In file included from prog.c:1:
/usr/lib/gcc/x86_64-linux-gnu/8/include/emmintrin.h:1185:25: note: expected ‘__m128i’ {aka ‘__vector(2) long long int’} but argument is of type ‘__v8hu’ {aka ‘__vector(8) short unsigned int’}
 _mm_srli_si128 (__m128i __A, const int __N)
                 ~~~~~~~~^~~
prog.c:58:73: warning: unused variable ‘regS’ [-Wunused-variable]
     __v8hu regX, regY, regZero, reg0, reg1, regK0, regK1, regK2, regK3, regS, regKC, regKP, reg2, reg3, regLC, regLI;
                                                                         ^~~~
stdout
Standard output is empty