Viewing file: sse2-mmx-pinsrw.c (1.22 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* { dg-do run } */ /* { dg-options "-O2 -fno-strict-aliasing -msse2" } */ /* { dg-additional-options "-mno-mmx" { target { ! ia32 } } } */
#include <string.h> #include "sse2-check.h"
__attribute__((noinline, noclone)) static void test_pinsrw (__m64 *i, int val, unsigned int imm, int *r) { switch (imm) { case 0: *(__m64 *) r = _m_pinsrw (*i, val, 0); break; case 1: *(__m64 *) r = _m_pinsrw (*i, val, 1); break; case 2: *(__m64 *) r = _m_pinsrw (*i, val, 2); break; case 3: *(__m64 *) r = _m_pinsrw (*i, val, 3); break; default: break; } }
/* Routine to manually compute the results */ static void compute_correct_result (__m64 *src_p, int val, unsigned int imm, int *res_p) { short *res = (short *) res_p; *(__m64 *) res_p = *src_p; if (imm < 4) res[imm] = val; }
static void sse2_test (void) { int r[2], ck[2]; int i; int failed = 0; __v4hi y = { 3320, -3339, 48, 4392 };
/* Run the MMX tests */ for (i = 0; i < 4; i++) { test_pinsrw ((__m64 *) &y, 0x1234, i, r); compute_correct_result ((__m64 *) &y, 0x1234, i, ck); if (r[0] != ck[0] || r[1] != ck[1]) failed++; }
if (failed) abort (); }
|