152
|
1 /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */
|
|
2 /* { dg-add-options arm_v8_1m_mve_fp } */
|
|
3 /* { dg-additional-options "-O2" } */
|
|
4
|
|
5 #include "arm_mve.h"
|
|
6 int16x8_t value1;
|
|
7 int8x16_t value2;
|
|
8 int32x4_t value3;
|
|
9 uint8x16_t value4;
|
|
10 uint16x8_t value5;
|
|
11 int64x2_t value6;
|
|
12 uint32x4_t value7;
|
|
13 float16x8_t value8;
|
|
14 float32x4_t value9;
|
|
15
|
|
16 uint64x2_t
|
|
17 foo (mve_pred16_t __p)
|
|
18 {
|
|
19 uint64x2_t r1,r2,r3,r4,r5,r6,r7;
|
|
20 r1 = vpselq_u64 (vreinterpretq_u64_s16 (value1), vreinterpretq_u64_s8 (value2),
|
|
21 __p);
|
|
22 r2 = vpselq_u64 (r1, vreinterpretq_u64_s32 (value3), __p);
|
|
23 r3 = vpselq_u64 (r2, vreinterpretq_u64_u8 (value4), __p);
|
|
24 r4 = vpselq_u64 (r3, vreinterpretq_u64_u16 (value5), __p);
|
|
25 r5 = vpselq_u64 (r4, vreinterpretq_u64_s64 (value6), __p);
|
|
26 r6 = vpselq_u64 (r5, vreinterpretq_u64_u32 (value7), __p);
|
|
27 r7 = vpselq_u64 (r6, vreinterpretq_u64_f16 (value8), __p);
|
|
28 return vpselq_u64 (r7, vreinterpretq_u64_f32 (value9), __p);
|
|
29 }
|
|
30
|
|
31 uint64x2_t
|
|
32 foo1 (mve_pred16_t __p)
|
|
33 {
|
|
34 uint64x2_t r1,r2,r3,r4,r5,r6,r7;
|
|
35 r1 = vpselq_u64 (vreinterpretq_u64 (value1), vreinterpretq_u64 (value2), __p);
|
|
36 r2 = vpselq_u64 (r1, vreinterpretq_u64 (value3), __p);
|
|
37 r3 = vpselq_u64 (r2, vreinterpretq_u64 (value4), __p);
|
|
38 r4 = vpselq_u64 (r3, vreinterpretq_u64 (value5), __p);
|
|
39 r5 = vpselq_u64 (r4, vreinterpretq_u64 (value6), __p);
|
|
40 r6 = vpselq_u64 (r5, vreinterpretq_u64 (value7), __p);
|
|
41 r7 = vpselq_u64 (r6, vreinterpretq_u64 (value8), __p);
|
|
42 return vpselq_u64 (r7, vreinterpretq_u64 (value9), __p);
|
|
43 }
|
|
44
|
|
45 /* { dg-final { scan-assembler-times "vpsel" 8 } } */
|