Viewing file: sse2-mmx-pextrw.c (1.08 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_pextrw (__m64 *i, unsigned int imm, int *r) { switch (imm) { case 0: *r = _m_pextrw (*i, 0); break; case 1: *r = _m_pextrw (*i, 1); break; case 2: *r = _m_pextrw (*i, 2); break; case 3: *r = _m_pextrw (*i, 3); break; default: break; } }
/* Routine to manually compute the results */ static void compute_correct_result (__m64 *src_p, unsigned int imm, int *res_p) { unsigned short *src = (unsigned short *) src_p; if (imm < 4) *res_p = src[imm]; }
static void sse2_test (void) { int r, ck; int i; int failed = 0; __v4hi y = { 3320, -3339, 48, 4392 };
/* Run the MMX tests */ for (i = 0; i < 4; i++) { test_pextrw ((__m64 *) &y, i, &r); compute_correct_result ((__m64 *) &y, i, &ck); if (r != ck) failed++; }
if (failed) abort (); }
|