]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/powerpc/vec-gnb-1.c
2 /* { dg-require-effective-target powerpc_future_hw } */
3 /* { dg-require-effective-target int128 } */
4 /* { dg-options "-mdejagnu-cpu=future" } */
8 extern void abort (void);
10 unsigned long long int
11 do_vec_gnb (vector
unsigned __int128 source
, int stride
)
16 return vec_gnb (source
, 2);
18 return vec_gnb (source
, 3);
20 return vec_gnb (source
, 4);
22 return vec_gnb (source
, 5);
24 return vec_gnb (source
, 6);
26 return vec_gnb (source
, 7);
29 /* Illegal value of stride */
36 main (int argc
, char *argv
[])
38 /* For result = 0xaaaa_0000_0000_0000, use:
39 stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
40 stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
42 For result = 0xaaaa_aaaa_0000_0000, use:
43 stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
44 stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
47 /* The last array element appears in the left-most (first) bit
48 positions of the vector register. */
49 vector
unsigned __int128 source_a
=
50 { ((unsigned __int128
) 0x8888888800000000ull
) << 64 };
51 vector
unsigned __int128 source_b
=
52 { ((unsigned __int128
) 0x8080808080808080ull
) << 64 };
53 vector
unsigned __int128 source_c
=
54 { ((unsigned __int128
) 0x8888888888888888ull
) << 64 };
55 vector
unsigned __int128 source_d
=
56 { 0x8080808080808080ull
|
57 ((unsigned __int128
) 0x8080808080808080ull
) << 64 };
59 unsigned long long int results
[] =
60 { 0xaaaa000000000000ull
, 0xaaaa000000000000ull
,
61 0xaaaaaaaa00000000ull
, 0xaaaaaaaa00000000ull
};
63 if (do_vec_gnb (source_a
, 2) != results
[0])
65 if (do_vec_gnb (source_b
, 4) != results
[1])
67 if (do_vec_gnb (source_c
, 2) != results
[2])
69 if (do_vec_gnb (source_d
, 4) != results
[3])