typedef long long llong; typedef char vchar64 __attribute__((__vector_size__(64 * sizeof(char)))); typedef char vchar32 __attribute__((__vector_size__(32 * sizeof(char)))); __attribute__((noinline)) __attribute__((noclone)) vchar32 test1char32(char c) { vchar32 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vchar32 test2char32(char * p) { char c = *p; vchar32 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } typedef char vchar16 __attribute__((__vector_size__(16 * sizeof(char)))); __attribute__((noinline)) __attribute__((noclone)) vchar16 test1char16(char c) { vchar16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vchar16 test2char16(char * p) { char c = *p; vchar16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } typedef char vchar8 __attribute__((__vector_size__(8 * sizeof(char)))); __attribute__((noinline)) __attribute__((noclone)) vchar8 test1char8(char c) { vchar8 v = { c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vchar8 test2char8(char * p) { char c = *p; vchar8 v = { c, c, c, c, c, c, c, c }; return v; } typedef char vchar4 __attribute__((__vector_size__(4 * sizeof(char)))); __attribute__((noinline)) __attribute__((noclone)) vchar4 test1char4(char c) { vchar4 v = { c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vchar4 test2char4(char * p) { char c = *p; vchar4 v = { c, c, c, c }; return v; } typedef char vchar2 __attribute__((__vector_size__(2 * sizeof(char)))); __attribute__((noinline)) __attribute__((noclone)) vchar2 test1char2(char c) { vchar2 v = { c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vchar2 test2char2(char * p) { char c = *p; vchar2 v = { c, c }; return v; } typedef char vchar1 __attribute__((__vector_size__(1 * sizeof(char)))); __attribute__((noinline)) __attribute__((noclone)) vchar1 test1char1(char c) { vchar1 v = { c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vchar1 test2char1(char * p) { char c = *p; vchar1 v = { c }; return v; } typedef short vshort32 __attribute__((__vector_size__(32 * sizeof(short)))); __attribute__((noinline)) __attribute__((noclone)) vshort32 test1short32(short c) { vshort32 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vshort32 test2short32(short * p) { short c = *p; vshort32 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } typedef short vshort16 __attribute__((__vector_size__(16 * sizeof(short)))); __attribute__((noinline)) __attribute__((noclone)) vshort16 test1short16(short c) { vshort16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vshort16 test2short16(short * p) { short c = *p; vshort16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } typedef short vshort8 __attribute__((__vector_size__(8 * sizeof(short)))); __attribute__((noinline)) __attribute__((noclone)) vshort8 test1short8(short c) { vshort8 v = { c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vshort8 test2short8(short * p) { short c = *p; vshort8 v = { c, c, c, c, c, c, c, c }; return v; } typedef short vshort4 __attribute__((__vector_size__(4 * sizeof(short)))); __attribute__((noinline)) __attribute__((noclone)) vshort4 test1short4(short c) { vshort4 v = { c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vshort4 test2short4(short * p) { short c = *p; vshort4 v = { c, c, c, c }; return v; } typedef short vshort2 __attribute__((__vector_size__(2 * sizeof(short)))); __attribute__((noinline)) __attribute__((noclone)) vshort2 test1short2(short c) { vshort2 v = { c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vshort2 test2short2(short * p) { short c = *p; vshort2 v = { c, c }; return v; } typedef short vshort1 __attribute__((__vector_size__(1 * sizeof(short)))); __attribute__((noinline)) __attribute__((noclone)) vshort1 test1short1(short c) { vshort1 v = { c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vshort1 test2short1(short * p) { short c = *p; vshort1 v = { c }; return v; } typedef int vint16 __attribute__((__vector_size__(16 * sizeof(int)))); __attribute__((noinline)) __attribute__((noclone)) vint16 test1int16(int c) { vint16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vint16 test2int16(int * p) { int c = *p; vint16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } typedef int vint8 __attribute__((__vector_size__(8 * sizeof(int)))); __attribute__((noinline)) __attribute__((noclone)) vint8 test1int8(int c) { vint8 v = { c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vint8 test2int8(int * p) { int c = *p; vint8 v = { c, c, c, c, c, c, c, c }; return v; } void test3int8(void) { int c = 17; int i; vint8 a = test1int8(c); for (i = 0; i < 8; i++) if (a[i] != 17) __builtin_abort(); vint8 b = test2int8(&c); for (i = 0; i < 8; i++) if (a[i] != 17) __builtin_abort(); } typedef int vint4 __attribute__((__vector_size__(4 * sizeof(int)))); __attribute__((noinline)) __attribute__((noclone)) vint4 test1int4(int c) { vint4 v = { c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vint4 test2int4(int * p) { int c = *p; vint4 v = { c, c, c, c }; return v; } typedef int vint2 __attribute__((__vector_size__(2 * sizeof(int)))); __attribute__((noinline)) __attribute__((noclone)) vint2 test1int2(int c) { vint2 v = { c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vint2 test2int2(int * p) { int c = *p; vint2 v = { c, c }; return v; } typedef int vint1 __attribute__((__vector_size__(1 * sizeof(int)))); __attribute__((noinline)) __attribute__((noclone)) vint1 test1int1(int c) { vint1 v = { c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vint1 test2int1(int * p) { int c = *p; vint1 v = { c }; return v; } typedef float vfloat16 __attribute__((__vector_size__(16 * sizeof(float)))); __attribute__((noinline)) __attribute__((noclone)) vfloat16 test1float16(float c) { vfloat16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vfloat16 test2float16(float * p) { float c = *p; vfloat16 v = { c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c }; return v; } typedef float vfloat8 __attribute__((__vector_size__(8 * sizeof(float)))); __attribute__((noinline)) __attribute__((noclone)) vfloat8 test1float8(float c) { vfloat8 v = { c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vfloat8 test2float8(float * p) { float c = *p; vfloat8 v = { c, c, c, c, c, c, c, c }; return v; } typedef float vfloat4 __attribute__((__vector_size__(4 * sizeof(float)))); __attribute__((noinline)) __attribute__((noclone)) vfloat4 test1float4(float c) { vfloat4 v = { c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vfloat4 test2float4(float * p) { float c = *p; vfloat4 v = { c, c, c, c }; return v; } typedef float vfloat2 __attribute__((__vector_size__(2 * sizeof(float)))); __attribute__((noinline)) __attribute__((noclone)) vfloat2 test1float2(float c) { vfloat2 v = { c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vfloat2 test2float2(float * p) { float c = *p; vfloat2 v = { c, c }; return v; } typedef float vfloat1 __attribute__((__vector_size__(1 * sizeof(float)))); __attribute__((noinline)) __attribute__((noclone)) vfloat1 test1float1(float c) { vfloat1 v = { c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vfloat1 test2float1(float * p) { float c = *p; vfloat1 v = { c }; return v; } typedef llong vllong8 __attribute__((__vector_size__(8 * sizeof(llong)))); __attribute__((noinline)) __attribute__((noclone)) vllong8 test1llong8(llong c) { vllong8 v = { c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vllong8 test2llong8(llong * p) { llong c = *p; vllong8 v = { c, c, c, c, c, c, c, c }; return v; } typedef llong vllong4 __attribute__((__vector_size__(4 * sizeof(llong)))); __attribute__((noinline)) __attribute__((noclone)) vllong4 test1llong4(llong c) { vllong4 v = { c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vllong4 test2llong4(llong * p) { llong c = *p; vllong4 v = { c, c, c, c }; return v; } typedef llong vllong2 __attribute__((__vector_size__(2 * sizeof(llong)))); __attribute__((noinline)) __attribute__((noclone)) vllong2 test1llong2(llong c) { vllong2 v = { c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vllong2 test2llong2(llong * p) { llong c = *p; vllong2 v = { c, c }; return v; } typedef llong vllong1 __attribute__((__vector_size__(1 * sizeof(llong)))); __attribute__((noinline)) __attribute__((noclone)) vllong1 test1llong1(llong c) { vllong1 v = { c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vllong1 test2llong1(llong * p) { llong c = (llong) *test1char8; vllong1 v = { c }; return v; } typedef double vdouble8 __attribute__((__vector_size__(8 * sizeof(double)))); __attribute__((noinline)) __attribute__((noclone)) vdouble8 test1double8(double c) { vdouble8 v = { c, c, c, c, c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vdouble8 test2double8(double * p) { double c = *p; vdouble8 v = { c, c, c, c, c, c, c, c }; return v; } typedef double vdouble4 __attribute__((__vector_size__(4 * sizeof(double)))); __attribute__((noinline)) __attribute__((noclone)) vdouble4 test1double4(double c) { vdouble4 v = { c, c, c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vdouble4 test2double4(double * p) { double c = *p; vdouble4 v = { c, c, c, c }; return v; } typedef double vdouble2 __attribute__((__vector_size__(2 * sizeof(double)))); __attribute__((noinline)) __attribute__((noclone)) vdouble2 test1double2(double c) { vdouble2 v = { c, c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vdouble2 test2double2(double * p) { double c = *p; vdouble2 v = { c, c }; return v; } typedef double vdouble1 __attribute__((__vector_size__(1 * sizeof(double)))); __attribute__((noinline)) __attribute__((noclone)) vdouble1 test1double1(double c) { vdouble1 v = { c }; return v; } __attribute__((noinline)) __attribute__((noclone)) vdouble1 test2double1(double * p) { double c = *p; vdouble1 v = { c }; return v; } int main() { test3int8(); return 0; }