1 /* { dg-do compile } */
2 /* { dg-require-effective-target int128 } */
3 /* { dg-options "-mdejagnu-cpu=power10" } */
7 extern void abort (void);
10 do_vec_gnb (vector
unsigned __int128 source
, int stride
)
15 return vec_gnb (source
, 2);
17 return vec_gnb (source
, 3);
19 return vec_gnb (source
, 4);
21 return vec_gnb (source
, 5);
23 return vec_gnb (source
, 6);
25 return vec_gnb (source
, 7);
28 /* Illegal value of stride */
35 main (int argc
, char *argv
[])
37 /* For result = 0xaaaa_0000_0000_0000, use:
38 stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
39 stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
41 For result = 0xaaaa_aaaa_0000_0000, use:
42 stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
43 stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
46 /* The last array element appears in the left-most (first) bit
47 positions of the vector register. */
48 vector
unsigned __int128 source_a
=
49 { ((unsigned __int128
) 0x8888888800000000ull
) << 64 };
50 vector
unsigned __int128 source_b
=
51 { ((unsigned __int128
) 0x8080808080808080ull
) << 64 };
52 vector
unsigned __int128 source_c
=
53 { ((unsigned __int128
) 0x8888888888888888ull
) << 64 };
54 vector
unsigned __int128 source_d
=
55 { 0x8080808080808080ull
|
56 ((unsigned __int128
) 0x8080808080808080ull
) << 64 };
58 unsigned long long int results
[] =
59 { 0xaaaa000000000000ull
, 0xaaaa000000000000ull
,
60 0xaaaaaaaa00000000ull
, 0xaaaaaaaa00000000ull
};
62 if (do_vec_gnb (source_a
, 2) != results
[0])
64 if (do_vec_gnb (source_b
, 4) != results
[1])
66 if (do_vec_gnb (source_c
, 2) != results
[2])
68 if (do_vec_gnb (source_d
, 4) != results
[3])
74 /* { dg-final { scan-assembler {\mvgnb\M} } } */