]>
Commit | Line | Data |
---|---|---|
51795b91 | 1 | /* { dg-do compile } */ |
649c640c | 2 | /* { dg-additional-options "-march=rv64gcv_zvfh -mabi=lp64d -Wno-pedantic -Wno-psabi" } */ |
51795b91 RD |
3 | |
4 | #include <stdint-gcc.h> | |
5 | ||
6 | typedef int64_t vnx8di __attribute__((vector_size (64))); | |
7 | typedef int32_t vnx16si __attribute__((vector_size (64))); | |
8 | typedef int16_t vnx32hi __attribute__((vector_size (64))); | |
9 | typedef int8_t vnx64qi __attribute__((vector_size (64))); | |
10 | typedef _Float16 vnx32hf __attribute__((vector_size (64))); | |
11 | typedef float vnx16sf __attribute__((vector_size (64))); | |
12 | typedef double vnx8df __attribute__((vector_size (64))); | |
13 | ||
14 | #define VEC_EXTRACT(S,V,IDX) \ | |
15 | S \ | |
16 | __attribute__((noipa)) \ | |
17 | vec_extract_##V##_##IDX (V v) \ | |
18 | { \ | |
19 | return v[IDX]; \ | |
20 | } | |
21 | ||
573bb719 RD |
22 | #define VEC_EXTRACT_VAR3(S,V) \ |
23 | S \ | |
24 | __attribute__((noipa)) \ | |
25 | vec_extract_var_##V (V v, int32_t idx) \ | |
26 | { \ | |
27 | return v[idx]; \ | |
28 | } | |
29 | ||
51795b91 RD |
30 | #define TEST_ALL3(T) \ |
31 | T (_Float16, vnx32hf, 0) \ | |
32 | T (_Float16, vnx32hf, 3) \ | |
33 | T (_Float16, vnx32hf, 7) \ | |
34 | T (_Float16, vnx32hf, 8) \ | |
35 | T (_Float16, vnx32hf, 16) \ | |
36 | T (_Float16, vnx32hf, 31) \ | |
37 | T (float, vnx16sf, 0) \ | |
38 | T (float, vnx16sf, 2) \ | |
39 | T (float, vnx16sf, 6) \ | |
40 | T (float, vnx16sf, 8) \ | |
41 | T (float, vnx16sf, 14) \ | |
42 | T (double, vnx8df, 0) \ | |
43 | T (double, vnx8df, 2) \ | |
44 | T (double, vnx8df, 4) \ | |
45 | T (double, vnx8df, 6) \ | |
46 | T (int64_t, vnx8di, 0) \ | |
47 | T (int64_t, vnx8di, 2) \ | |
48 | T (int64_t, vnx8di, 4) \ | |
49 | T (int64_t, vnx8di, 6) \ | |
50 | T (int32_t, vnx16si, 0) \ | |
51 | T (int32_t, vnx16si, 2) \ | |
52 | T (int32_t, vnx16si, 6) \ | |
53 | T (int32_t, vnx16si, 8) \ | |
54 | T (int32_t, vnx16si, 14) \ | |
55 | T (int16_t, vnx32hi, 0) \ | |
56 | T (int16_t, vnx32hi, 2) \ | |
57 | T (int16_t, vnx32hi, 14) \ | |
58 | T (int16_t, vnx32hi, 16) \ | |
59 | T (int16_t, vnx32hi, 30) \ | |
60 | T (int8_t, vnx64qi, 0) \ | |
61 | T (int8_t, vnx64qi, 2) \ | |
62 | T (int8_t, vnx64qi, 30) \ | |
63 | T (int8_t, vnx64qi, 32) \ | |
64 | T (int8_t, vnx64qi, 63) \ | |
65 | ||
573bb719 RD |
66 | #define TEST_ALL_VAR3(T) \ |
67 | T (_Float16, vnx32hf) \ | |
68 | T (float, vnx16sf) \ | |
69 | T (double, vnx8df) \ | |
70 | T (int64_t, vnx8di) \ | |
71 | T (int32_t, vnx16si) \ | |
72 | T (int16_t, vnx32hi) \ | |
73 | T (int8_t, vnx64qi) \ | |
74 | ||
51795b91 | 75 | TEST_ALL3 (VEC_EXTRACT) |
573bb719 | 76 | TEST_ALL_VAR3 (VEC_EXTRACT_VAR3) |
51795b91 | 77 | |
573bb719 RD |
78 | /* { dg-final { scan-assembler-times {vset[i]*vli\s+[a-z0-9,]+,\s*e8,\s*m4,\s*ta,\s*ma} 6 } } */ |
79 | /* { dg-final { scan-assembler-times {vset[i]*vli\s+[a-z0-9,]+,\s*e16,\s*m4,\s*ta,\s*ma} 13 } } */ | |
80 | /* { dg-final { scan-assembler-times {vset[i]*vli\s+[a-z0-9,]+,\s*e32,\s*m4,\s*ta,\s*ma} 12 } } */ | |
81 | /* { dg-final { scan-assembler-times {vset[i]*vli\s+[a-z0-9,]+,\s*e64,\s*m4,\s*ta,\s*ma} 10 } } */ | |
51795b91 RD |
82 | |
83 | /* { dg-final { scan-assembler-times {\tvslidedown.vi} 25 } } */ | |
573bb719 | 84 | /* { dg-final { scan-assembler-times {\tvslidedown.vx} 9 } } */ |
51795b91 | 85 | |
573bb719 RD |
86 | /* { dg-final { scan-assembler-times {\tvfmv.f.s} 18 } } */ |
87 | /* { dg-final { scan-assembler-times {\tvmv.x.s} 23 } } */ | |
9b24611a RD |
88 | |
89 | /* { dg-final { scan-assembler-not {\tsext} } } */ |