if (!TARGET_MMX_WITH_SSE)
return false;
mode = V4HImode;
- gen_shr = gen_ashrv4hi3;
+ gen_shr = gen_lshrv4hi3;
gen_shl = gen_ashlv4hi3;
gen_or = gen_iorv4hi3;
break;
case E_V16QImode:
mode = V8HImode;
- gen_shr = gen_vlshrv8hi3;
- gen_shl = gen_vashlv8hi3;
+ gen_shr = gen_lshrv8hi3;
+ gen_shl = gen_ashlv8hi3;
gen_or = gen_iorv8hi3;
break;
default: return false;
/* PR target/107563.C */
/* { dg-do compile { target { ! ia32 } } } */
-/* { dg-options "-std=c++2b -O3 -msse2" } */
+/* { dg-options "-std=c++2b -O3 -msse2 -mno-sse3" } */
/* { dg-final { scan-assembler-times "psllw" 1 } } */
-/* { dg-final { scan-assembler-times "psraw" 1 } } */
+/* { dg-final { scan-assembler-times "psrlw" 1 } } */
/* { dg-final { scan-assembler-times "por" 1 } } */
using temp_vec_type2 [[__gnu__::__vector_size__(8)]] = char;
/* PR target/107563.C */
-/* { dg-options "-std=c++2b -O3 -msse2" } */
+/* { dg-options "-std=c++2b -O3 -msse2 -mno-sse3" } */
/* { dg-final { scan-assembler-times "psllw" 1 } } */
/* { dg-final { scan-assembler-times "psrlw" 1 } } */
/* { dg-final { scan-assembler-times "por" 1 } } */
--- /dev/null
+/* { dg-do run { target sse2_runtime } } */
+/* { dg-options "-O2 -msse2" } */
+
+typedef unsigned char v8qi __attribute__((vector_size (8)));
+
+v8qi res, a;
+
+void __attribute__((noipa))
+foo (void)
+{
+ res = __builtin_shufflevector(a, a, 1, 0, 3, 2, 5, 4, 7, 6);
+}
+
+void
+comp (v8qi a, v8qi b, int n)
+{
+ for (unsigned i = 0; i < n; ++i)
+ if ((a)[i] != (b)[i])
+ __builtin_abort ();
+}
+
+#define E0 140
+#define E1 141
+#define E2 142
+#define E3 143
+#define E4 144
+#define E5 145
+#define E6 146
+#define E7 147
+
+int main()
+{
+ a = (v8qi) { E0, E1, E2, E3, E4, E5, E6, E7 };
+ foo ();
+ comp (res, ((v8qi) { E1, E0, E3, E2, E5, E4, E7, E6 }), 8);
+ return 0;
+}
+