aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c87
1 files changed, 87 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c b/gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c
new file mode 100644
index 000000000..bef4d2d16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.target/i386/sse4_1-pextrb.c
@@ -0,0 +1,87 @@
+/* { dg-do run } */
+/* { dg-require-effective-target sse4 } */
+/* { dg-options "-O2 -msse4.1" } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse4_1-check.h"
+#endif
+
+#ifndef TEST
+#define TEST sse4_1_test
+#endif
+
+#include CHECK_H
+#include <smmintrin.h>
+
+#define msk0 0
+#define msk1 1
+#define msk2 2
+#define msk3 3
+#define msk4 4
+#define msk5 5
+#define msk6 6
+#define msk7 7
+#define msk8 8
+#define msk9 9
+#define msk10 10
+#define msk11 11
+#define msk12 12
+#define msk13 13
+#define msk14 14
+#define msk15 15
+
+static void
+TEST (void)
+{
+ union
+ {
+ __m128i x;
+ int i[4];
+ char c[16];
+ } val1;
+ int res[16], masks[16];
+ int i;
+
+ val1.i[0] = 0x04030201;
+ val1.i[1] = 0x08070605;
+ val1.i[2] = 0x0C0B0A09;
+ val1.i[3] = 0x100F0E0D;
+
+ res[0] = _mm_extract_epi8 (val1.x, msk0);
+ res[1] = _mm_extract_epi8 (val1.x, msk1);
+ res[2] = _mm_extract_epi8 (val1.x, msk2);
+ res[3] = _mm_extract_epi8 (val1.x, msk3);
+ res[4] = _mm_extract_epi8 (val1.x, msk4);
+ res[5] = _mm_extract_epi8 (val1.x, msk5);
+ res[6] = _mm_extract_epi8 (val1.x, msk6);
+ res[7] = _mm_extract_epi8 (val1.x, msk7);
+ res[8] = _mm_extract_epi8 (val1.x, msk8);
+ res[9] = _mm_extract_epi8 (val1.x, msk9);
+ res[10] = _mm_extract_epi8 (val1.x, msk10);
+ res[11] = _mm_extract_epi8 (val1.x, msk11);
+ res[12] = _mm_extract_epi8 (val1.x, msk12);
+ res[13] = _mm_extract_epi8 (val1.x, msk13);
+ res[14] = _mm_extract_epi8 (val1.x, msk14);
+ res[15] = _mm_extract_epi8 (val1.x, msk15);
+
+ masks[0] = msk0;
+ masks[1] = msk1;
+ masks[2] = msk2;
+ masks[3] = msk3;
+ masks[4] = msk4;
+ masks[5] = msk5;
+ masks[6] = msk6;
+ masks[7] = msk7;
+ masks[8] = msk8;
+ masks[9] = msk9;
+ masks[10] = msk10;
+ masks[11] = msk11;
+ masks[12] = msk12;
+ masks[13] = msk13;
+ masks[14] = msk14;
+ masks[15] = msk15;
+
+ for (i = 0; i < 16; i++)
+ if (res[i] != val1.c [masks[i]])
+ abort ();
+}