50 lines
1.5 KiB
C
50 lines
1.5 KiB
C
/* { dg-do compile { target powerpc*-*-* } } */
|
|
/* { dg-require-effective-target powerpc_altivec_ok } */
|
|
/* { dg-options "-maltivec -mabi=altivec -O2" } */
|
|
|
|
/* Testcase by Richard Guenther and Steven Bosscher.
|
|
Check that "easy" AltiVec constants are correctly synthesized
|
|
if they need to be reloaded. */
|
|
|
|
typedef __attribute__ ((vector_size (16))) unsigned char v16qi;
|
|
typedef __attribute__ ((vector_size (16))) unsigned short v8hi;
|
|
typedef __attribute__ ((vector_size (16))) unsigned int v4si;
|
|
|
|
#define REGLIST \
|
|
"77", "78", "79", "80", "81", "82", "83", "84", "85", "86", \
|
|
"87", "88", "89", "90", "91", "92", "93", "94", "95", "96", \
|
|
"97", "98", "99", "100", "101", "102", "103", "104", "105", "106", \
|
|
"107", "108"
|
|
|
|
|
|
#define TEST(a, result, b) \
|
|
void a##_##b (int h) \
|
|
{ \
|
|
volatile a tmp; \
|
|
while (h-- > 0) \
|
|
{ \
|
|
asm ("" : : : REGLIST); \
|
|
tmp = (a) (result) __builtin_altivec_##b (5); \
|
|
} \
|
|
} \
|
|
\
|
|
void a##_##b##_neg (int h) \
|
|
{ \
|
|
volatile a tmp; \
|
|
while (h-- > 0) \
|
|
{ \
|
|
asm ("" : : : REGLIST); \
|
|
tmp = (a) (result) __builtin_altivec_##b (-5); \
|
|
} \
|
|
}
|
|
|
|
TEST(v16qi, v16qi, vspltisb)
|
|
TEST(v16qi, v8hi, vspltish)
|
|
TEST(v16qi, v4si, vspltisw)
|
|
TEST(v8hi, v16qi, vspltisb)
|
|
TEST(v8hi, v8hi, vspltish)
|
|
TEST(v8hi, v4si, vspltisw)
|
|
TEST(v4si, v16qi, vspltisb)
|
|
TEST(v4si, v8hi, vspltish)
|
|
TEST(v4si, v4si, vspltisw)
|