aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/sse4_1-ptest-6.c
blob: d9114bb24a867cdfeaaef849a24cabc861ca9921 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/* { dg-do compile } */
/* { dg-options "-O2 -msse4.1" } */

typedef long long __m128i __attribute__ ((__vector_size__ (16)));

extern void ext (void);

void foo (__m128i x, __m128i y)
{
  __m128i a = x & ~y;
  if (__builtin_ia32_ptestz128 (a, a))
    ext();
}

void bar (__m128i x, __m128i y)
{
  __m128i a = ~x & y;
  if (__builtin_ia32_ptestz128 (a, a))
    ext();
}

void foo2 (__m128i x, __m128i y)
{
  __m128i a = x & ~y;
  if (__builtin_ia32_ptestz128 (a, a))
    ext();
}

void bar2 (__m128i x, __m128i y)
{
  __m128i a = ~x & y;
  if (__builtin_ia32_ptestz128 (a, a))
    ext();
}

/* { dg-final { scan-assembler-times "ptest\[ \\t\]+%" 4 } } */
/* { dg-final { scan-assembler-times "jn?c" 4 } } */
/* { dg-final { scan-assembler-not "pandn" } } */
/* { dg-final { scan-assembler-not "jne" } } */
/* { dg-final { scan-assembler-not "je" } } */