Open Broadcaster Software
Free, open source software for live streaming and recording
mmx.h
Go to the documentation of this file.
1 /* Copyright (c) 2017-2018 Evan Nemerson <evan@nemerson.com>
2  *
3  * Permission is hereby granted, free of charge, to any person
4  * obtaining a copy of this software and associated documentation
5  * files (the "Software"), to deal in the Software without
6  * restriction, including without limitation the rights to use, copy,
7  * modify, merge, publish, distribute, sublicense, and/or sell copies
8  * of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be
12  * included in all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  */
23 
24 #if !defined(SIMDE__MMX_H)
25 #if !defined(SIMDE__MMX_H)
26 #define SIMDE__MMX_H
27 #endif
28 #include "simde-common.h"
29 
30 #if defined(SIMDE_MMX_FORCE_NATIVE)
31 #define SIMDE_MMX_NATIVE
32 #elif defined(__MMX__) && !defined(SIMDE_MMX_NO_NATIVE) && \
33  !defined(SIMDE_NO_NATIVE)
34 #define SIMDE_MMX_NATIVE
35 #elif defined(__ARM_NEON) && !defined(SIMDE_MMX_NO_NEON) && \
36  !defined(SIMDE_NO_NEON)
37 #define SIMDE_MMX_NEON
38 #endif
39 
40 #if defined(SIMDE_MMX_NATIVE)
41 #include <mmintrin.h>
42 #else
43 #if defined(SIMDE_MMX_NEON)
44 #include <arm_neon.h>
45 #endif
46 #endif
47 #include <stdint.h>
48 #include <limits.h>
49 #include <stdlib.h>
50 #include <string.h>
51 
53 
54 typedef union {
55 #if defined(SIMDE__ENABLE_GCC_VEC_EXT)
56  int8_t i8 __attribute__((__vector_size__(8), __may_alias__));
57  int16_t i16 __attribute__((__vector_size__(8), __may_alias__));
58  int32_t i32 __attribute__((__vector_size__(8), __may_alias__));
59  int64_t i64 __attribute__((__vector_size__(8), __may_alias__));
60  uint8_t u8 __attribute__((__vector_size__(8), __may_alias__));
61  uint16_t u16 __attribute__((__vector_size__(8), __may_alias__));
62  uint32_t u32 __attribute__((__vector_size__(8), __may_alias__));
63  uint64_t u64 __attribute__((__vector_size__(8), __may_alias__));
64  simde_float32 f32 __attribute__((__vector_size__(8), __may_alias__));
65 #else
66  int8_t i8[8];
67  int16_t i16[4];
68  int32_t i32[2];
69  int64_t i64[1];
70  uint8_t u8[8];
71  uint16_t u16[4];
72  uint32_t u32[2];
73  uint64_t u64[1];
74  simde_float32 f32[2];
75 #endif
76 
77 #if defined(SIMDE_MMX_NATIVE)
78  __m64 n;
79 #elif defined(SIMDE_MMX_NEON)
80  int8x8_t neon_i8;
81  int16x4_t neon_i16;
82  int32x2_t neon_i32;
83  int64x1_t neon_i64;
84  uint8x8_t neon_u8;
85  uint16x4_t neon_u16;
86  uint32x2_t neon_u32;
87  uint64x1_t neon_u64;
88  float32x2_t neon_f32;
89 #endif
90 } simde__m64;
91 
92 #if defined(SIMDE_MMX_NATIVE)
93 HEDLEY_STATIC_ASSERT(sizeof(__m64) == sizeof(simde__m64),
94  "__m64 size doesn't match simde__m64 size");
95 SIMDE__FUNCTION_ATTRIBUTES simde__m64 SIMDE__M64_C(__m64 v)
96 {
97  simde__m64 r;
98  r.n = v;
99  return r;
100 }
101 #elif defined(SIMDE_MMX_NEON)
102 #define SIMDE__M64_NEON_C(T, expr) \
103  (simde__m64) { .neon_##T = (expr) }
104 #endif
105 HEDLEY_STATIC_ASSERT(8 == sizeof(simde__m64), "__m64 size incorrect");
106 
109 {
110 #if defined(SIMDE_MMX_NATIVE)
111  return SIMDE__M64_C(_mm_add_pi8(a.n, b.n));
112 #else
113  simde__m64 r;
115  for (size_t i = 0; i < 8; i++) {
116  r.i8[i] = a.i8[i] + b.i8[i];
117  }
118  return r;
119 #endif
120 }
121 #define simde_m_paddb(a, b) simde_mm_add_pi8(a, b)
122 
125 {
126 #if defined(SIMDE_MMX_NATIVE)
127  return SIMDE__M64_C(_mm_add_pi16(a.n, b.n));
128 #else
129  simde__m64 r;
131  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
132  r.i16[i] = a.i16[i] + b.i16[i];
133  }
134  return r;
135 #endif
136 }
137 #define simde_m_paddw(a, b) simde_mm_add_pi16(a, b)
138 
141 {
142 #if defined(SIMDE_MMX_NATIVE)
143  return SIMDE__M64_C(_mm_add_pi32(a.n, b.n));
144 #else
145  simde__m64 r;
147  for (size_t i = 0; i < (8 / sizeof(int32_t)); i++) {
148  r.i32[i] = a.i32[i] + b.i32[i];
149  }
150  return r;
151 #endif
152 }
153 #define simde_m_paddd(a, b) simde_mm_add_pi32(a, b)
154 
157 {
158 #if defined(SIMDE_MMX_NATIVE)
159  return SIMDE__M64_C(_mm_adds_pi8(a.n, b.n));
160 #else
161  simde__m64 r;
163  for (int i = 0; i < 8; i++) {
164  if ((((b.i8[i]) > 0) && ((a.i8[i]) > (INT8_MAX - (b.i8[i]))))) {
165  r.i8[i] = INT8_MAX;
166  } else if ((((b.i8[i]) < 0) &&
167  ((a.i8[i]) < (INT8_MIN - (b.i8[i]))))) {
168  r.i8[i] = INT8_MIN;
169  } else {
170  r.i8[i] = (a.i8[i]) + (b.i8[i]);
171  }
172  }
173  return r;
174 #endif
175 }
176 #define simde_m_paddsb(a, b) simde_mm_adds_pi8(a, b)
177 
180 {
181 #if defined(SIMDE_MMX_NATIVE)
182  return SIMDE__M64_C(_mm_adds_pu8(a.n, b.n));
183 #else
184  simde__m64 r;
186  for (size_t i = 0; i < 8; i++) {
187  const int32_t x = a.u8[i] + b.u8[i];
188  if (x < 0)
189  r.u8[i] = 0;
190  else if (x > UINT8_MAX)
191  r.u8[i] = UINT8_MAX;
192  else
193  r.u8[i] = (uint8_t)x;
194  }
195  return r;
196 #endif
197 }
198 #define simde_m_paddusb(a, b) simde_mm_adds_pu8(a, b)
199 
202 {
203 #if defined(SIMDE_MMX_NATIVE)
204  return SIMDE__M64_C(_mm_adds_pi16(a.n, b.n));
205 #else
206  simde__m64 r;
208  for (int i = 0; i < 4; i++) {
209  if ((((b.i16[i]) > 0) &&
210  ((a.i16[i]) > (INT16_MAX - (b.i16[i]))))) {
211  r.i16[i] = INT16_MAX;
212  } else if ((((b.i16[i]) < 0) &&
213  ((a.i16[i]) < (SHRT_MIN - (b.i16[i]))))) {
214  r.i16[i] = SHRT_MIN;
215  } else {
216  r.i16[i] = (a.i16[i]) + (b.i16[i]);
217  }
218  }
219  return r;
220 #endif
221 }
222 #define simde_m_paddsw(a, b) simde_mm_adds_pi16(a, b)
223 
226 {
227 #if defined(SIMDE_MMX_NATIVE)
228  return SIMDE__M64_C(_mm_adds_pu16(a.n, b.n));
229 #else
230  simde__m64 r;
232  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
233  const uint32_t x = a.u16[i] + b.u16[i];
234  if (x > UINT16_MAX)
235  r.u16[i] = UINT16_MAX;
236  else
237  r.u16[i] = (uint16_t)x;
238  }
239  return r;
240 #endif
241 }
242 #define simde_m_paddusw(a, b) simde_mm_adds_pu16(a, b)
243 
246 {
247 #if defined(SIMDE_MMX_NATIVE)
248  return SIMDE__M64_C(_mm_and_si64(a.n, b.n));
249 #else
250  simde__m64 r;
251  r.i64[0] = a.i64[0] & b.i64[0];
252  return r;
253 #endif
254 }
255 #define simde_m_pand(a, b) simde_mm_and_si64(a, b)
256 
259 {
260 #if defined(SIMDE_MMX_NATIVE)
261  return SIMDE__M64_C(_mm_andnot_si64(a.n, b.n));
262 #else
263  simde__m64 r;
264  r.i64[0] = ~(a.i64[0]) & b.i64[0];
265  return r;
266 #endif
267 }
268 #define simde_m_pandn(a, b) simde_mm_andnot_si64(a, b)
269 
272 {
273 #if defined(SIMDE_MMX_NATIVE)
274  return SIMDE__M64_C(_mm_cmpeq_pi8(a.n, b.n));
275 #else
276  simde__m64 r;
278  for (int i = 0; i < 8; i++) {
279  r.i8[i] = (a.i8[i] == b.i8[i]) * 0xff;
280  }
281  return r;
282 #endif
283 }
284 #define simde_m_pcmpeqb(a, b) simde_mm_cmpeq_pi8(a, b)
285 
288 {
289 #if defined(SIMDE_MMX_NATIVE)
290  return SIMDE__M64_C(_mm_cmpeq_pi16(a.n, b.n));
291 #else
292  simde__m64 r;
294  for (int i = 0; i < 4; i++) {
295  r.i16[i] = (a.i16[i] == b.i16[i]) * 0xffff;
296  }
297  return r;
298 #endif
299 }
300 #define simde_m_pcmpeqw(a, b) simde_mm_cmpeq_pi16(a, b)
301 
304 {
305 #if defined(SIMDE_MMX_NATIVE)
306  return SIMDE__M64_C(_mm_cmpeq_pi32(a.n, b.n));
307 #else
308  simde__m64 r;
310  for (int i = 0; i < 2; i++) {
311  r.i32[i] = (a.i32[i] == b.i32[i]) * 0xffffffff;
312  }
313  return r;
314 #endif
315 }
316 #define simde_m_pcmpeqd(a, b) simde_mm_cmpeq_pi32(a, b)
317 
320 {
321 #if defined(SIMDE_MMX_NATIVE)
322  return SIMDE__M64_C(_mm_cmpgt_pi8(a.n, b.n));
323 #else
324  simde__m64 r;
326  for (int i = 0; i < 8; i++) {
327  r.i8[i] = (a.i8[i] > b.i8[i]) * 0xff;
328  }
329  return r;
330 #endif
331 }
332 #define simde_m_pcmpgtb(a, b) simde_mm_cmpgt_pi8(a, b)
333 
336 {
337 #if defined(SIMDE_MMX_NATIVE)
338  return SIMDE__M64_C(_mm_cmpgt_pi16(a.n, b.n));
339 #else
340  simde__m64 r;
342  for (int i = 0; i < 4; i++) {
343  r.i16[i] = (a.i16[i] > b.i16[i]) * 0xffff;
344  }
345  return r;
346 #endif
347 }
348 #define simde_m_pcmpgtw(a, b) simde_mm_cmpgt_pi16(a, b)
349 
352 {
353 #if defined(SIMDE_MMX_NATIVE)
354  return SIMDE__M64_C(_mm_cmpgt_pi32(a.n, b.n));
355 #else
356  simde__m64 r;
358  for (int i = 0; i < 2; i++) {
359  r.i32[i] = (a.i32[i] > b.i32[i]) * 0xffffffff;
360  }
361  return r;
362 #endif
363 }
364 #define simde_m_pcmpgtd(a, b) simde_mm_cmpgt_pi32(a, b)
365 
368 {
369 #if defined(SIMDE_MMX_NATIVE) && defined(SIMDE_ARCH_AMD64) && !defined(__PGI)
370  return _mm_cvtm64_si64(a.n);
371 #else
372  return a.i64[0];
373 #endif
374 }
375 #define simde_m_to_int64(a) simde_mm_cvtm64_si64(a)
376 
379 {
380 #if defined(SIMDE_MMX_NATIVE)
381  return SIMDE__M64_C(_mm_cvtsi32_si64(a));
382 #else
383  simde__m64 r;
384  r.i32[0] = a;
385  r.i32[1] = 0;
386  return r;
387 #endif
388 }
389 #define simde_m_from_int(a) simde_mm_cvtsi32_si64(a)
390 
393 {
394 #if defined(SIMDE_MMX_NATIVE) && defined(SIMDE_ARCH_AMD64) && !defined(__PGI)
395  return SIMDE__M64_C(_mm_cvtsi64_m64(a));
396 #else
397  simde__m64 r;
398  r.i64[0] = a;
399  return r;
400 #endif
401 }
402 #define simde_m_from_int64(a) simde_mm_cvtsi64_m64(a)
403 
406 {
407 #if defined(SIMDE_MMX_NATIVE)
408  return _mm_cvtsi64_si32(a.n);
409 #else
410  return a.i32[0];
411 #endif
412 }
413 
415 void simde_mm_empty(void)
416 {
417 #if defined(SIMDE_MMX_NATIVE)
418  _mm_empty();
419 #else
420 #endif
421 }
422 #define simde_m_empty() simde_mm_empty()
423 
426 {
427 #if defined(SIMDE_MMX_NATIVE)
428  return SIMDE__M64_C(_mm_madd_pi16(a.n, b.n));
429 #else
430  simde__m64 r;
432  for (int i = 0; i < 4; i += 2) {
433  r.i32[i / 2] =
434  (a.i16[i] * b.i16[i]) + (a.i16[i + 1] * b.i16[i + 1]);
435  }
436  return r;
437 #endif
438 }
439 #define simde_m_pmaddwd(a, b) simde_mm_madd_pi16(a, b)
440 
443 {
444 #if defined(SIMDE_MMX_NATIVE)
445  return SIMDE__M64_C(_mm_mulhi_pi16(a.n, b.n));
446 #else
447  simde__m64 r;
449  for (int i = 0; i < 4; i++) {
450  r.i16[i] = (int16_t)((a.i16[i] * b.i16[i]) >> 16);
451  }
452  return r;
453 #endif
454 }
455 #define simde_m_pmulhw(a, b) simde_mm_mulhi_pi16(a, b)
456 
459 {
460 #if defined(SIMDE_MMX_NATIVE)
461  return SIMDE__M64_C(_mm_mullo_pi16(a.n, b.n));
462 #else
463  simde__m64 r;
465  for (int i = 0; i < 4; i++) {
466  r.i16[i] = (int16_t)((a.i16[i] * b.i16[i]) & 0xffff);
467  }
468  return r;
469 #endif
470 }
471 #define simde_m_pmullw(a, b) simde_mm_mullo_pi16(a, b)
472 
475 {
476 #if defined(SIMDE_MMX_NATIVE)
477  return SIMDE__M64_C(_mm_or_si64(a.n, b.n));
478 #else
479  simde__m64 r;
480  r.i64[0] = a.i64[0] | b.i64[0];
481  return r;
482 #endif
483 }
484 #define simde_m_por(a, b) simde_mm_or_si64(a, b)
485 
488 {
489 #if defined(SIMDE_MMX_NATIVE)
490  return SIMDE__M64_C(_mm_packs_pi16(a.n, b.n));
491 #else
492  simde__m64 r;
493 
495  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
496  if (a.i16[i] < INT8_MIN) {
497  r.i8[i] = INT8_MIN;
498  } else if (a.i16[i] > INT8_MAX) {
499  r.i8[i] = INT8_MAX;
500  } else {
501  r.i8[i] = (int8_t)a.i16[i];
502  }
503  }
504 
506  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
507  if (b.i16[i] < INT8_MIN) {
508  r.i8[i + 4] = INT8_MIN;
509  } else if (b.i16[i] > INT8_MAX) {
510  r.i8[i + 4] = INT8_MAX;
511  } else {
512  r.i8[i + 4] = (int8_t)b.i16[i];
513  }
514  }
515 
516  return r;
517 #endif
518 }
519 #define simde_m_packsswb(a, b) simde_mm_packs_pi16(a, b)
520 
523 {
524 #if defined(SIMDE_MMX_NATIVE)
525  return SIMDE__M64_C(_mm_packs_pi32(a.n, b.n));
526 #else
527  simde__m64 r;
528 
530  for (size_t i = 0; i < (8 / sizeof(a.i32[0])); i++) {
531  if (a.i32[i] < SHRT_MIN) {
532  r.i16[i] = SHRT_MIN;
533  } else if (a.i32[i] > INT16_MAX) {
534  r.i16[i] = INT16_MAX;
535  } else {
536  r.i16[i] = (int16_t)a.i32[i];
537  }
538  }
539 
541  for (size_t i = 0; i < (8 / sizeof(b.i32[0])); i++) {
542  if (b.i32[i] < SHRT_MIN) {
543  r.i16[i + 2] = SHRT_MIN;
544  } else if (b.i32[i] > INT16_MAX) {
545  r.i16[i + 2] = INT16_MAX;
546  } else {
547  r.i16[i + 2] = (int16_t)b.i32[i];
548  }
549  }
550 
551  return r;
552 #endif
553 }
554 #define simde_m_packssdw(a, b) simde_mm_packs_pi32(a, b)
555 
558 {
559 #if defined(SIMDE_MMX_NATIVE)
560  return SIMDE__M64_C(_mm_packs_pu16(a.n, b.n));
561 #else
562  simde__m64 r;
563 
565  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
566  if (a.i16[i] > UINT8_MAX) {
567  r.u8[i] = UINT8_MAX;
568  } else if (a.i16[i] < 0) {
569  r.u8[i] = 0;
570  } else {
571  r.u8[i] = (int8_t)a.i16[i];
572  }
573  }
574 
576  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
577  if (b.i16[i] > UINT8_MAX) {
578  r.u8[i + 4] = UINT8_MAX;
579  } else if (b.i16[i] < 0) {
580  r.u8[i + 4] = 0;
581  } else {
582  r.u8[i + 4] = (int8_t)b.i16[i];
583  }
584  }
585 
586  return r;
587 #endif
588 }
589 #define simde_m_packuswb(a, b) simde_mm_packs_pu16(a, b)
590 
592 simde__m64 simde_mm_set_pi8(int8_t e7, int8_t e6, int8_t e5, int8_t e4,
593  int8_t e3, int8_t e2, int8_t e1, int8_t e0)
594 {
595 #if defined(SIMDE_MMX_NATIVE)
596  return SIMDE__M64_C(_mm_set_pi8(e7, e6, e5, e4, e3, e2, e1, e0));
597 #else
598  simde__m64 r;
599  r.i8[0] = e0;
600  r.i8[1] = e1;
601  r.i8[2] = e2;
602  r.i8[3] = e3;
603  r.i8[4] = e4;
604  r.i8[5] = e5;
605  r.i8[6] = e6;
606  r.i8[7] = e7;
607  return r;
608 #endif
609 }
610 
612 simde__m64 simde_x_mm_set_pu8(uint8_t e7, uint8_t e6, uint8_t e5, uint8_t e4,
613  uint8_t e3, uint8_t e2, uint8_t e1, uint8_t e0)
614 {
615 #if defined(SIMDE_MMX_NATIVE)
616  return SIMDE__M64_C(_mm_set_pi8((int8_t)e7, (int8_t)e6, (int8_t)e5,
617  (int8_t)e4, (int8_t)e3, (int8_t)e2,
618  (int8_t)e1, (int8_t)e0));
619 #else
620  simde__m64 r;
621  r.u8[0] = e0;
622  r.u8[1] = e1;
623  r.u8[2] = e2;
624  r.u8[3] = e3;
625  r.u8[4] = e4;
626  r.u8[5] = e5;
627  r.u8[6] = e6;
628  r.u8[7] = e7;
629  return r;
630 #endif
631 }
632 
634 simde__m64 simde_mm_set_pi16(int16_t e3, int16_t e2, int16_t e1, int16_t e0)
635 {
636 #if defined(SIMDE_MMX_NATIVE)
637  return SIMDE__M64_C(_mm_set_pi16(e3, e2, e1, e0));
638 #else
639  simde__m64 r;
640  r.i16[0] = e0;
641  r.i16[1] = e1;
642  r.i16[2] = e2;
643  r.i16[3] = e3;
644  return r;
645 #endif
646 }
647 
649 simde__m64 simde_x_mm_set_pu16(uint16_t e3, uint16_t e2, uint16_t e1,
650  uint16_t e0)
651 {
652 #if defined(SIMDE_MMX_NATIVE)
653  return SIMDE__M64_C(_mm_set_pi16((int16_t)e3, (int16_t)e2, (int16_t)e1,
654  (int16_t)e0));
655 #else
656  simde__m64 r;
657  r.u16[0] = e0;
658  r.u16[1] = e1;
659  r.u16[2] = e2;
660  r.u16[3] = e3;
661  return r;
662 #endif
663 }
664 
666 simde__m64 simde_x_mm_set_pu32(uint32_t e1, uint32_t e0)
667 {
668 #if defined(SIMDE_MMX_NATIVE)
669  return SIMDE__M64_C(_mm_set_pi32((int32_t)e1, (int32_t)e0));
670 #else
671  simde__m64 r;
672  r.u32[0] = e0;
673  r.u32[1] = e1;
674  return r;
675 #endif
676 }
677 
679 simde__m64 simde_mm_set_pi32(int32_t e1, int32_t e0)
680 {
681 #if defined(SIMDE_MMX_NATIVE)
682  return SIMDE__M64_C(_mm_set_pi32(e1, e0));
683 #else
684  simde__m64 r;
685  r.i32[0] = e0;
686  r.i32[1] = e1;
687  return r;
688 #endif
689 }
690 
693 {
694 #if defined(SIMDE_MMX_NATIVE)
695  return SIMDE__M64_C(_mm_set1_pi8(a));
696 #else
697  return simde_mm_set_pi8(a, a, a, a, a, a, a, a);
698 #endif
699 }
700 
703 {
704 #if defined(SIMDE_MMX_NATIVE)
705  return SIMDE__M64_C(_mm_set1_pi16(a));
706 #else
707  return simde_mm_set_pi16(a, a, a, a);
708 #endif
709 }
710 
713 {
714 #if defined(SIMDE_MMX_NATIVE)
715  return SIMDE__M64_C(_mm_set1_pi32(a));
716 #else
717  return simde_mm_set_pi32(a, a);
718 #endif
719 }
720 
722 simde__m64 simde_mm_setr_pi8(int8_t e7, int8_t e6, int8_t e5, int8_t e4,
723  int8_t e3, int8_t e2, int8_t e1, int8_t e0)
724 {
725 #if defined(SIMDE_MMX_NATIVE)
726  return SIMDE__M64_C(_mm_setr_pi8(e7, e6, e5, e4, e3, e2, e1, e0));
727 #else
728  return simde_mm_set_pi8(e0, e1, e2, e3, e4, e5, e6, e7);
729 #endif
730 }
731 
733 simde__m64 simde_mm_setr_pi16(int16_t e3, int16_t e2, int16_t e1, int16_t e0)
734 {
735 #if defined(SIMDE_MMX_NATIVE)
736  return SIMDE__M64_C(_mm_setr_pi16(e3, e2, e1, e0));
737 #else
738  return simde_mm_set_pi16(e0, e1, e2, e3);
739 #endif
740 }
741 
743 simde__m64 simde_mm_setr_pi32(int32_t e1, int32_t e0)
744 {
745 #if defined(SIMDE_MMX_NATIVE)
746  return SIMDE__M64_C(_mm_setr_pi32(e1, e0));
747 #else
748  return simde_mm_set_pi32(e0, e1);
749 #endif
750 }
751 
754 {
755 #if defined(SIMDE_MMX_NATIVE)
756  return SIMDE__M64_C(_mm_setzero_si64());
757 #else
758  return simde_mm_set_pi32(0, 0);
759 #endif
760 }
761 
764 {
765 #if defined(SIMDE_MMX_NATIVE)
766  return SIMDE__M64_C(_mm_sll_pi16(a.n, count.n));
767 #else
768  simde__m64 r;
769 
770  if (HEDLEY_UNLIKELY(count.u64[0] > 15)) {
771  memset(&r, 0, sizeof(r));
772  return r;
773  }
774 
776  for (size_t i = 0; i < (sizeof(r.u16) / sizeof(r.u16[0])); i++) {
777  r.u16[i] = a.u16[i] << count.u64[0];
778  }
779  return r;
780 #endif
781 }
782 #define simde_m_psllw(a, count) simde_mm_sll_pi16(a, count)
783 
786 {
787 #if defined(SIMDE_MMX_NATIVE)
788  return SIMDE__M64_C(_mm_sll_pi32(a.n, count.n));
789 #else
790  simde__m64 r;
791 
792  if (HEDLEY_UNLIKELY(count.u64[0] > 31)) {
793  memset(&r, 0, sizeof(r));
794  return r;
795  }
796 
798  for (size_t i = 0; i < (sizeof(r.u32) / sizeof(r.u32[0])); i++) {
799  r.u32[i] = a.u32[i] << count.u64[0];
800  }
801  return r;
802 #endif
803 }
804 #define simde_m_pslld(a, count) simde_mm_sll_pi32(a, count)
805 
808 {
809 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
810  return SIMDE__M64_C(_mm_slli_pi16(a.n, count));
811 #else
812  simde__m64 r;
813 
815  for (size_t i = 0; i < (sizeof(r.u16) / sizeof(r.u16[0])); i++) {
816  r.u16[i] = a.u16[i] << count;
817  }
818 
819  return r;
820 #endif
821 }
822 #define simde_m_psllwi(a, count) simde_mm_slli_pi16(a, count)
823 
826 {
827 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
828  return SIMDE__M64_C(_mm_slli_pi32(a.n, count));
829 #else
830  simde__m64 r;
831 
833  for (size_t i = 0; i < (8 / sizeof(int)); i++) {
834  r.u32[i] = a.u32[i] << count;
835  }
836 
837  return r;
838 #endif
839 }
840 #define simde_m_pslldi(a, b) simde_mm_slli_pi32(a, b)
841 
844 {
845 #if defined(SIMDE_MMX_NATIVE)
846  return SIMDE__M64_C(_mm_slli_si64(a.n, count));
847 #else
848  simde__m64 r;
849  r.u64[0] = a.u64[0] << count;
850  return r;
851 #endif
852 }
853 #define simde_m_psllqi(a, count) simde_mm_slli_si64(a, count)
854 
857 {
858 #if defined(SIMDE_MMX_NATIVE)
859  return SIMDE__M64_C(_mm_sll_si64(a.n, count.n));
860 #else
861  simde__m64 r;
862 
863  if (HEDLEY_UNLIKELY(count.u64[0] > 63)) {
864  memset(&r, 0, sizeof(r));
865  return r;
866  }
867 
868  r.u64[0] = a.u64[0] << count.u64[0];
869 
870  return r;
871 #endif
872 }
873 #define simde_m_psllq(a, count) simde_mm_sll_si64(a, count)
874 
877 {
878 #if defined(SIMDE_MMX_NATIVE)
879  return SIMDE__M64_C(_mm_srl_pi16(a.n, count.n));
880 #else
881  simde__m64 r;
882 
883  if (HEDLEY_UNLIKELY(count.u64[0] > 15)) {
884  memset(&r, 0, sizeof(r));
885  return r;
886  }
887 
889  for (size_t i = 0; i < sizeof(r.u16) / sizeof(r.u16[0]); i++) {
890  r.u16[i] = a.u16[i] >> count.u64[0];
891  }
892  return r;
893 #endif
894 }
895 #define simde_m_psrlw(a, count) simde_mm_srl_pi16(a, count)
896 
899 {
900 #if defined(SIMDE_MMX_NATIVE)
901  return SIMDE__M64_C(_mm_srl_pi32(a.n, count.n));
902 #else
903  simde__m64 r;
904 
905  if (HEDLEY_UNLIKELY(count.u64[0] > 31)) {
906  memset(&r, 0, sizeof(r));
907  return r;
908  }
909 
911  for (size_t i = 0; i < sizeof(r.u32) / sizeof(r.u32[0]); i++) {
912  r.u32[i] = a.u32[i] >> count.u64[0];
913  }
914  return r;
915 #endif
916 }
917 #define simde_m_psrld(a, count) simde_mm_srl_pi32(a, count)
918 
921 {
922 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
923  return SIMDE__M64_C(_mm_srli_pi16(a.n, count));
924 #else
925  simde__m64 r;
926 
928  for (size_t i = 0; i < (8 / sizeof(uint16_t)); i++) {
929  r.u16[i] = a.u16[i] >> count;
930  }
931 
932  return r;
933 #endif
934 }
935 #define simde_m_psrlwi(a, count) simde_mm_srli_pi16(a, count)
936 
939 {
940 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
941  return SIMDE__M64_C(_mm_srli_pi32(a.n, count));
942 #else
943  simde__m64 r;
944 
946  for (size_t i = 0; i < (8 / sizeof(int)); i++) {
947  r.u32[i] = a.u32[i] >> count;
948  }
949 
950  return r;
951 #endif
952 }
953 #define simde_m_psrldi(a, count) simde_mm_srli_pi32(a, count)
954 
957 {
958 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
959  return SIMDE__M64_C(_mm_srli_si64(a.n, count));
960 #else
961  simde__m64 r;
962  r.u64[0] = a.u64[0] >> count;
963  return r;
964 #endif
965 }
966 #define simde_m_psrlqi(a, count) simde_mm_srli_si64(a, count)
967 
970 {
971 #if defined(SIMDE_MMX_NATIVE)
972  return SIMDE__M64_C(_mm_srl_si64(a.n, count.n));
973 #else
974  simde__m64 r;
975 
976  if (HEDLEY_UNLIKELY(count.u64[0] > 63)) {
977  memset(&r, 0, sizeof(r));
978  return r;
979  }
980 
981  r.u64[0] = a.u64[0] >> count.u64[0];
982  return r;
983 #endif
984 }
985 #define simde_m_psrlq(a, count) simde_mm_srl_si64(a, count)
986 
989 {
990 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
991  return SIMDE__M64_C(_mm_srai_pi16(a.n, count));
992 #else
993  simde__m64 r;
994 
995  const uint16_t m =
996  (uint16_t)((~0U) << ((sizeof(int16_t) * CHAR_BIT) - count));
997 
999  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
1000  const uint16_t is_neg = ((uint16_t)(
1001  ((a.u16[i]) >> ((sizeof(int16_t) * CHAR_BIT) - 1))));
1002  r.u16[i] = (a.u16[i] >> count) | (m * is_neg);
1003  }
1004 
1005  return r;
1006 #endif
1007 }
1008 #define simde_m_psrawi(a, count) simde_mm_srai_pi16(a, count)
1009 
1012 {
1013 #if defined(SIMDE_MMX_NATIVE) && !defined(__PGI)
1014  return SIMDE__M64_C(_mm_srai_pi32(a.n, count));
1015 #else
1016  simde__m64 r;
1017 
1018  const uint32_t m =
1019  (uint32_t)((~0U) << ((sizeof(int) * CHAR_BIT) - count));
1021  for (size_t i = 0; i < (8 / sizeof(int)); i++) {
1022  const uint32_t is_neg = ((uint32_t)(
1023  ((a.u32[i]) >> ((sizeof(int) * CHAR_BIT) - 1))));
1024  r.u32[i] = (a.u32[i] >> count) | (m * is_neg);
1025  }
1026 
1027  return r;
1028 #endif
1029 }
1030 #define simde_m_srai_pi32(a, count) simde_mm_srai_pi32(a, count)
1031 
1034 {
1035 #if defined(SIMDE_MMX_NATIVE)
1036  return SIMDE__M64_C(_mm_sra_pi16(a.n, count.n));
1037 #else
1038  simde__m64 r;
1039  int cnt = (int)count.i64[0];
1040 
1041  if (cnt > 15 || cnt < 0) {
1042  for (size_t i = 0; i < (sizeof(r.i16) / sizeof(r.i16[0]));
1043  i++) {
1044  r.u16[i] = (a.i16[i] < 0) ? 0xffff : 0x0000;
1045  }
1046  } else {
1047  const uint16_t m = (uint16_t)(
1048  (~0U) << ((sizeof(int16_t) * CHAR_BIT) - cnt));
1049  for (size_t i = 0; i < (sizeof(r.i16) / sizeof(r.i16[0]));
1050  i++) {
1051  const uint16_t is_neg = a.i16[i] < 0;
1052  r.u16[i] = (a.u16[i] >> cnt) | (m * is_neg);
1053  }
1054  }
1055 
1056  return r;
1057 #endif
1058 }
1059 #define simde_m_psraw(a, count) simde_mm_sra_pi16(a, count)
1060 
1063 {
1064 #if defined(SIMDE_MMX_NATIVE)
1065  return SIMDE__M64_C(_mm_sra_pi32(a.n, count.n));
1066 #else
1067  simde__m64 r;
1068  const uint64_t cnt = count.u64[0];
1069 
1070  if (cnt > 31) {
1071  for (size_t i = 0; i < (sizeof(r.i32) / sizeof(r.i32[0]));
1072  i++) {
1073  r.u32[i] = (a.i32[i] < 0) ? UINT32_MAX : 0;
1074  }
1075  } else if (cnt == 0) {
1076  memcpy(&r, &a, sizeof(r));
1077  } else {
1078  const uint32_t m = (uint32_t)(
1079  (~0U) << ((sizeof(int32_t) * CHAR_BIT) - cnt));
1080  for (size_t i = 0; i < (sizeof(r.i32) / sizeof(r.i32[0]));
1081  i++) {
1082  const uint32_t is_neg = a.i32[i] < 0;
1083  r.u32[i] = (a.u32[i] >> cnt) | (m * is_neg);
1084  }
1085  }
1086 
1087  return r;
1088 #endif
1089 }
1090 #define simde_m_psrad(a, b) simde_mm_sra_pi32(a, b)
1091 
1094 {
1095 #if defined(SIMDE_MMX_NATIVE)
1096  return SIMDE__M64_C(_mm_sub_pi8(a.n, b.n));
1097 #else
1098  simde__m64 r;
1100  for (size_t i = 0; i < 8; i++) {
1101  r.i8[i] = a.i8[i] - b.i8[i];
1102  }
1103  return r;
1104 #endif
1105 }
1106 #define simde_m_psubb(a, b) simde_mm_sub_pi8(a, b)
1107 
1110 {
1111 #if defined(SIMDE_MMX_NATIVE)
1112  return SIMDE__M64_C(_mm_sub_pi16(a.n, b.n));
1113 #else
1114  simde__m64 r;
1116  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
1117  r.i16[i] = a.i16[i] - b.i16[i];
1118  }
1119  return r;
1120 #endif
1121 }
1122 #define simde_m_psubw(a, b) simde_mm_sub_pi16(a, b)
1123 
1126 {
1127 #if defined(SIMDE_MMX_NATIVE)
1128  return SIMDE__M64_C(_mm_sub_pi32(a.n, b.n));
1129 #else
1130  simde__m64 r;
1132  for (size_t i = 0; i < (8 / sizeof(int)); i++) {
1133  r.i32[i] = a.i32[i] - b.i32[i];
1134  }
1135  return r;
1136 #endif
1137 }
1138 #define simde_m_psubd(a, b) simde_mm_sub_pi32(a, b)
1139 
1142 {
1143 #if defined(SIMDE_MMX_NATIVE)
1144  return SIMDE__M64_C(_mm_subs_pi8(a.n, b.n));
1145 #else
1146  simde__m64 r;
1148  for (size_t i = 0; i < (8); i++) {
1149  if (((b.i8[i]) > 0 && (a.i8[i]) < INT8_MIN + (b.i8[i]))) {
1150  r.i8[i] = INT8_MIN;
1151  } else if ((b.i8[i]) < 0 && (a.i8[i]) > INT8_MAX + (b.i8[i])) {
1152  r.i8[i] = INT8_MAX;
1153  } else {
1154  r.i8[i] = (a.i8[i]) - (b.i8[i]);
1155  }
1156  }
1157  return r;
1158 #endif
1159 }
1160 #define simde_m_psubsb(a, b) simde_mm_subs_pi8(a, b)
1161 
1164 {
1165 #if defined(SIMDE_MMX_NATIVE)
1166  return SIMDE__M64_C(_mm_subs_pu8(a.n, b.n));
1167 #else
1168  simde__m64 r;
1170  for (size_t i = 0; i < (8); i++) {
1171  const int32_t x = a.u8[i] - b.u8[i];
1172  if (x < 0) {
1173  r.u8[i] = 0;
1174  } else if (x > UINT8_MAX) {
1175  r.u8[i] = UINT8_MAX;
1176  } else {
1177  r.u8[i] = (uint8_t)x;
1178  }
1179  }
1180  return r;
1181 #endif
1182 }
1183 #define simde_m_psubusb(a, b) simde_mm_subs_pu8(a, b)
1184 
1187 {
1188 #if defined(SIMDE_MMX_NATIVE)
1189  return SIMDE__M64_C(_mm_subs_pi16(a.n, b.n));
1190 #else
1191  simde__m64 r;
1193  for (size_t i = 0; i < (8 / sizeof(int16_t)); i++) {
1194  if (((b.i16[i]) > 0 && (a.i16[i]) < SHRT_MIN + (b.i16[i]))) {
1195  r.i16[i] = SHRT_MIN;
1196  } else if ((b.i16[i]) < 0 &&
1197  (a.i16[i]) > INT16_MAX + (b.i16[i])) {
1198  r.i16[i] = INT16_MAX;
1199  } else {
1200  r.i16[i] = (a.i16[i]) - (b.i16[i]);
1201  }
1202  }
1203  return r;
1204 #endif
1205 }
1206 #define simde_m_psubsw(a, b) simde_mm_subs_pi16(a, b)
1207 
1210 {
1211 #if defined(SIMDE_MMX_NATIVE)
1212  return SIMDE__M64_C(_mm_subs_pu16(a.n, b.n));
1213 #else
1214  simde__m64 r;
1216  for (size_t i = 0; i < (8 / sizeof(uint16_t)); i++) {
1217  const int x = a.u16[i] - b.u16[i];
1218  if (x < 0) {
1219  r.u16[i] = 0;
1220  } else if (x > UINT16_MAX) {
1221  r.u16[i] = UINT16_MAX;
1222  } else {
1223  r.u16[i] = (uint16_t)x;
1224  }
1225  }
1226  return r;
1227 #endif
1228 }
1229 #define simde_m_psubusw(a, b) simde_mm_subs_pu16(a, b)
1230 
1233 {
1234 #if defined(SIMDE_MMX_NATIVE)
1235  return SIMDE__M64_C(_mm_unpackhi_pi8(a.n, b.n));
1236 #else
1237  simde__m64 r;
1238  r.i8[0] = a.i8[4];
1239  r.i8[1] = b.i8[4];
1240  r.i8[2] = a.i8[5];
1241  r.i8[3] = b.i8[5];
1242  r.i8[4] = a.i8[6];
1243  r.i8[5] = b.i8[6];
1244  r.i8[6] = a.i8[7];
1245  r.i8[7] = b.i8[7];
1246  return r;
1247 #endif
1248 }
1249 #define simde_m_punpckhbw(a, b) simde_mm_unpackhi_pi8(a, b)
1250 
1253 {
1254 #if defined(SIMDE_MMX_NATIVE)
1255  return SIMDE__M64_C(_mm_unpackhi_pi16(a.n, b.n));
1256 #else
1257  simde__m64 r;
1258  r.i16[0] = a.i16[2];
1259  r.i16[1] = b.i16[2];
1260  r.i16[2] = a.i16[3];
1261  r.i16[3] = b.i16[3];
1262  return r;
1263 #endif
1264 }
1265 #define simde_m_punpckhwd(a, b) simde_mm_unpackhi_pi16(a, b)
1266 
1269 {
1270 #if defined(SIMDE_MMX_NATIVE)
1271  return SIMDE__M64_C(_mm_unpackhi_pi32(a.n, b.n));
1272 #else
1273  simde__m64 r;
1274  r.i32[0] = a.i32[1];
1275  r.i32[1] = b.i32[1];
1276  return r;
1277 #endif
1278 }
1279 #define simde_m_punpckhdq(a, b) simde_mm_unpackhi_pi32(a, b)
1280 
1283 {
1284 #if defined(SIMDE_MMX_NATIVE)
1285  return SIMDE__M64_C(_mm_unpacklo_pi8(a.n, b.n));
1286 #else
1287  simde__m64 r;
1288  r.i8[0] = a.i8[0];
1289  r.i8[1] = b.i8[0];
1290  r.i8[2] = a.i8[1];
1291  r.i8[3] = b.i8[1];
1292  r.i8[4] = a.i8[2];
1293  r.i8[5] = b.i8[2];
1294  r.i8[6] = a.i8[3];
1295  r.i8[7] = b.i8[3];
1296  return r;
1297 #endif
1298 }
1299 #define simde_m_punpcklbw(a, b) simde_mm_unpacklo_pi8(a, b)
1300 
1303 {
1304 #if defined(SIMDE_MMX_NATIVE)
1305  return SIMDE__M64_C(_mm_unpacklo_pi16(a.n, b.n));
1306 #else
1307  simde__m64 r;
1308  r.i16[0] = a.i16[0];
1309  r.i16[1] = b.i16[0];
1310  r.i16[2] = a.i16[1];
1311  r.i16[3] = b.i16[1];
1312  return r;
1313 #endif
1314 }
1315 #define simde_m_punpcklwd(a, b) simde_mm_unpacklo_pi16(a, b)
1316 
1319 {
1320 #if defined(SIMDE_MMX_NATIVE)
1321  return SIMDE__M64_C(_mm_unpacklo_pi32(a.n, b.n));
1322 #else
1323  simde__m64 r;
1324  r.i32[0] = a.i32[0];
1325  r.i32[1] = b.i32[0];
1326  return r;
1327 #endif
1328 }
1329 #define simde_m_punpckldq(a, b) simde_mm_unpacklo_pi32(a, b)
1330 
1333 {
1334 #if defined(SIMDE_MMX_NATIVE)
1335  return SIMDE__M64_C(_mm_xor_si64(a.n, b.n));
1336 #else
1337  simde__m64 r;
1338  r.i64[0] = a.i64[0] ^ b.i64[0];
1339  return r;
1340 #endif
1341 }
1342 #define simde_m_pxor(a, b) simde_mm_xor_si64(a, b)
1343 
1346 {
1347 #if defined(SIMDE_MMX_NATIVE)
1348  return _m_to_int(a.n);
1349 #else
1350  return a.i32[0];
1351 #endif
1352 }
1353 
1355 
1356 #endif /* !defined(SIMDE__MMX_H) */
simde_mm_sll_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sll_si64(simde__m64 a, simde__m64 count)
Definition: mmx.h:856
simde_mm_and_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_and_si64(simde__m64 a, simde__m64 b)
Definition: mmx.h:245
simde__m64::i16
int16_t i16[4]
Definition: mmx.h:67
simde_x_mm_set_pu8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_x_mm_set_pu8(uint8_t e7, uint8_t e6, uint8_t e5, uint8_t e4, uint8_t e3, uint8_t e2, uint8_t e1, uint8_t e0)
Definition: mmx.h:612
simde_x_mm_set_pu16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_x_mm_set_pu16(uint16_t e3, uint16_t e2, uint16_t e1, uint16_t e0)
Definition: mmx.h:649
simde_mm_cmpeq_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cmpeq_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:271
simde_mm_set1_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_set1_pi8(int8_t a)
Definition: mmx.h:692
simde__m64::i64
int64_t i64[1]
Definition: mmx.h:69
simde_mm_cmpgt_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cmpgt_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:319
simde_mm_cvtsi64_m64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cvtsi64_m64(int64_t a)
Definition: mmx.h:392
simde_mm_unpacklo_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_unpacklo_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:1302
simde_mm_packs_pu16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_packs_pu16(simde__m64 a, simde__m64 b)
Definition: mmx.h:557
simde_mm_setr_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_setr_pi16(int16_t e3, int16_t e2, int16_t e1, int16_t e0)
Definition: mmx.h:733
simde_mm_andnot_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_andnot_si64(simde__m64 a, simde__m64 b)
Definition: mmx.h:258
simde_mm_srl_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srl_pi32(simde__m64 a, simde__m64 count)
Definition: mmx.h:898
simde_mm_sra_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sra_pi32(simde__m64 a, simde__m64 count)
Definition: mmx.h:1062
simde_mm_srai_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srai_pi16(simde__m64 a, int count)
Definition: mmx.h:988
simde_mm_cmpeq_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cmpeq_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:303
simde_mm_set_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_set_pi32(int32_t e1, int32_t e0)
Definition: mmx.h:679
SIMDE__FUNCTION_ATTRIBUTES
#define SIMDE__FUNCTION_ATTRIBUTES
Definition: simde-common.h:121
simde_mm_adds_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_adds_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:156
simde_mm_add_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_add_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:124
simde_mm_add_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_add_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:140
simde_mm_sll_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sll_pi32(simde__m64 a, simde__m64 count)
Definition: mmx.h:785
simde_mm_sll_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sll_pi16(simde__m64 a, simde__m64 count)
Definition: mmx.h:763
simde_mm_mulhi_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_mulhi_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:442
simde__m64::u16
uint16_t u16[4]
Definition: mmx.h:71
simde_mm_sub_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sub_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:1109
simde_mm_slli_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_slli_si64(simde__m64 a, int count)
Definition: mmx.h:843
simde_mm_slli_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_slli_pi16(simde__m64 a, int count)
Definition: mmx.h:807
simde_mm_srl_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srl_si64(simde__m64 a, simde__m64 count)
Definition: mmx.h:969
simde__m64::u8
uint8_t u8[8]
Definition: mmx.h:70
simde_float32
SIMDE_FLOAT32_TYPE simde_float32
Definition: simde-common.h:150
simde_mm_cvtsi32_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cvtsi32_si64(int32_t a)
Definition: mmx.h:378
simde_mm_or_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_or_si64(simde__m64 a, simde__m64 b)
Definition: mmx.h:474
simde_mm_adds_pu16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_adds_pu16(simde__m64 a, simde__m64 b)
Definition: mmx.h:225
HEDLEY_STATIC_ASSERT
HEDLEY_STATIC_ASSERT(8==sizeof(simde__m64), "__m64 size incorrect")
simde_mm_unpackhi_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_unpackhi_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:1268
simde_mm_set1_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_set1_pi32(int32_t a)
Definition: mmx.h:712
simde_m_to_int
SIMDE__FUNCTION_ATTRIBUTES int32_t simde_m_to_int(simde__m64 a)
Definition: mmx.h:1345
simde_mm_adds_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_adds_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:201
simde_mm_srli_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srli_pi16(simde__m64 a, int count)
Definition: mmx.h:920
simde_mm_set_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_set_pi8(int8_t e7, int8_t e6, int8_t e5, int8_t e4, int8_t e3, int8_t e2, int8_t e1, int8_t e0)
Definition: mmx.h:592
simde_mm_set1_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_set1_pi16(int16_t a)
Definition: mmx.h:702
simde__m64
Definition: mmx.h:54
simde_mm_cmpeq_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cmpeq_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:287
simde_mm_set_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_set_pi16(int16_t e3, int16_t e2, int16_t e1, int16_t e0)
Definition: mmx.h:634
simde_mm_cmpgt_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cmpgt_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:351
SIMDE__VECTORIZE
#define SIMDE__VECTORIZE
Definition: simde-common.h:98
SIMDE__END_DECLS
#define SIMDE__END_DECLS
Definition: simde-common.h:131
simde_mm_subs_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_subs_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:1186
simde_mm_slli_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_slli_pi32(simde__m64 a, int count)
Definition: mmx.h:825
simde_mm_srai_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srai_pi32(simde__m64 a, int count)
Definition: mmx.h:1011
simde_mm_setzero_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_setzero_si64(void)
Definition: mmx.h:753
simde_mm_packs_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_packs_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:487
simde_mm_add_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_add_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:108
simde_mm_sub_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sub_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:1093
simde_mm_sub_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sub_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:1125
simde_mm_cvtm64_si64
SIMDE__FUNCTION_ATTRIBUTES int64_t simde_mm_cvtm64_si64(simde__m64 a)
Definition: mmx.h:367
simde_x_mm_set_pu32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_x_mm_set_pu32(uint32_t e1, uint32_t e0)
Definition: mmx.h:666
simde_mm_xor_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_xor_si64(simde__m64 a, simde__m64 b)
Definition: mmx.h:1332
simde_mm_unpackhi_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_unpackhi_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:1252
simde_mm_mullo_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_mullo_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:458
simde_mm_setr_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_setr_pi8(int8_t e7, int8_t e6, int8_t e5, int8_t e4, int8_t e3, int8_t e2, int8_t e1, int8_t e0)
Definition: mmx.h:722
simde_mm_sra_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_sra_pi16(simde__m64 a, simde__m64 count)
Definition: mmx.h:1033
simde_mm_subs_pu8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_subs_pu8(simde__m64 a, simde__m64 b)
Definition: mmx.h:1163
simde__m64::i8
int8_t i8[8]
Definition: mmx.h:66
simde__m64::u32
uint32_t u32[2]
Definition: mmx.h:72
simde_mm_srli_si64
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srli_si64(simde__m64 a, int count)
Definition: mmx.h:956
simde_mm_srli_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srli_pi32(simde__m64 a, int count)
Definition: mmx.h:938
simde-common.h
simde_mm_subs_pu16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_subs_pu16(simde__m64 a, simde__m64 b)
Definition: mmx.h:1209
simde_mm_unpackhi_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_unpackhi_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:1232
simde_mm_subs_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_subs_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:1141
simde_mm_srl_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_srl_pi16(simde__m64 a, simde__m64 count)
Definition: mmx.h:876
simde_mm_setr_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_setr_pi32(int32_t e1, int32_t e0)
Definition: mmx.h:743
simde_mm_unpacklo_pi8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_unpacklo_pi8(simde__m64 a, simde__m64 b)
Definition: mmx.h:1282
simde_mm_adds_pu8
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_adds_pu8(simde__m64 a, simde__m64 b)
Definition: mmx.h:179
SIMDE__BEGIN_DECLS
#define SIMDE__BEGIN_DECLS
Definition: simde-common.h:130
simde_mm_unpacklo_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_unpacklo_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:1318
simde_mm_cmpgt_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_cmpgt_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:335
simde_mm_packs_pi32
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_packs_pi32(simde__m64 a, simde__m64 b)
Definition: mmx.h:522
simde__m64::i32
int32_t i32[2]
Definition: mmx.h:68
simde__m64::u64
uint64_t u64[1]
Definition: mmx.h:73
HEDLEY_UNLIKELY
#define HEDLEY_UNLIKELY(expr)
Definition: hedley.h:1066
simde_mm_madd_pi16
SIMDE__FUNCTION_ATTRIBUTES simde__m64 simde_mm_madd_pi16(simde__m64 a, simde__m64 b)
Definition: mmx.h:425
simde_mm_cvtsi64_si32
SIMDE__FUNCTION_ATTRIBUTES int32_t simde_mm_cvtsi64_si32(simde__m64 a)
Definition: mmx.h:405
simde_mm_empty
SIMDE__FUNCTION_ATTRIBUTES void simde_mm_empty(void)
Definition: mmx.h:415