1 /* { dg-do compile } */
2 /* { dg-additional-options "-march=rv64gcv -mabi=lp64d -Wno-psabi" } */
6 #define MASK_2(X, Y) (Y) - 1 - (X), (Y) - 2 - (X)
7 #define MASK_4(X, Y) MASK_2 (X, Y), MASK_2 (X + 2, Y)
8 #define MASK_8(X, Y) MASK_4 (X, Y), MASK_4 (X + 4, Y)
9 #define MASK_16(X, Y) MASK_8 (X, Y), MASK_8 (X + 8, Y)
10 #define MASK_32(X, Y) MASK_16 (X, Y), MASK_16 (X + 16, Y)
11 #define MASK_64(X, Y) MASK_32 (X, Y), MASK_32 (X + 32, Y)
12 #define MASK_128(X, Y) MASK_64 (X, Y), MASK_64 (X + 64, Y)
14 #define PERMUTE(TYPE, NUNITS) \
15 __attribute__ ((noipa)) void permute_##TYPE (TYPE values1, TYPE values2, \
19 = __builtin_shufflevector (values1, values2, MASK_##NUNITS (0, NUNITS)); \
58 /* { dg-final { scan-assembler-times {vrgather\.vv\tv[0-9]+,\s*v[0-9]+,\s*v[0-9]+} 19 } } */
59 /* { dg-final { scan-assembler-times {vrgatherei16\.vv\tv[0-9]+,\s*v[0-9]+,\s*v[0-9]+} 12 } } */
60 /* { dg-final { scan-assembler-times {vrsub\.vi} 24 } } */
61 /* { dg-final { scan-assembler-times {vrsub\.vx} 7 } } */