| /* { dg-do compile } */ |
| /* { dg-additional-options "-Wno-pedantic -Wno-long-long -m64" } */ |
| |
| /* Vector return. Return via pointer. */ |
| |
| typedef char __attribute__ ((vector_size (1))) vc1; |
| typedef char __attribute__ ((vector_size (2))) vc2; |
| typedef char __attribute__ ((vector_size (4))) vc4; |
| typedef char __attribute__ ((vector_size (8))) vc8; |
| |
| typedef short __attribute__ ((vector_size (2))) vs1; |
| typedef short __attribute__ ((vector_size (4))) vs2; |
| typedef short __attribute__ ((vector_size (8))) vs4; |
| typedef short __attribute__ ((vector_size (16))) vs8; |
| |
| typedef int __attribute__ ((vector_size (4))) vi1; |
| typedef int __attribute__ ((vector_size (8))) vi2; |
| typedef int __attribute__ ((vector_size (16))) vi4; |
| typedef int __attribute__ ((vector_size (32))) vi8; |
| |
| typedef long long __attribute__ ((vector_size (8))) vll1; |
| typedef long long __attribute__ ((vector_size (16))) vll2; |
| typedef long long __attribute__ ((vector_size (32))) vll4; |
| typedef long long __attribute__ ((vector_size (64))) vll8; |
| |
| typedef float __attribute__ ((vector_size (4))) vf1; |
| typedef float __attribute__ ((vector_size (8))) vf2; |
| typedef float __attribute__ ((vector_size (16))) vf4; |
| typedef float __attribute__ ((vector_size (32))) vf8; |
| |
| typedef double __attribute__ ((vector_size (8))) vd1; |
| typedef double __attribute__ ((vector_size (16))) vd2; |
| typedef double __attribute__ ((vector_size (32))) vd4; |
| typedef double __attribute__ ((vector_size (64))) vd8; |
| |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvc1 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vc1 dcl_rvc1 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvc2 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vc2 dcl_rvc2 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvc4 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vc4 dcl_rvc4 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvc8 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vc8 dcl_rvc8 (void); |
| |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvs1 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vs1 dcl_rvs1 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvs2 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vs2 dcl_rvs2 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvs4 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vs4 dcl_rvs4 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvs8 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vs8 dcl_rvs8 (void); |
| |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvi1 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vi1 dcl_rvi1 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvi2 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vi2 dcl_rvi2 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvi4 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vi4 dcl_rvi4 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvi8 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vi8 dcl_rvi8 (void); |
| |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvll1 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vll1 dcl_rvll1 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvll2 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vll2 dcl_rvll2 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvll4 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vll4 dcl_rvll4 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvll8 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vll8 dcl_rvll8 (void); |
| |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvf1 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vf1 dcl_rvf1 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvf2 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vf2 dcl_rvf2 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvf4 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vf4 dcl_rvf4 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvf8 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vf8 dcl_rvf8 (void); |
| |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvd1 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vd1 dcl_rvd1 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvd2 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vd2 dcl_rvd2 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvd4 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vd4 dcl_rvd4 (void); |
| /* { dg-final { scan-assembler-times ".extern .func dcl_rvd8 \\(.param.u64 %\[_a-z0-9\]*\\);" 1 } } */ |
| vd8 dcl_rvd8 (void); |
| |
| void test_1 (void) |
| { |
| dcl_rvc1 (); |
| dcl_rvc2 (); |
| dcl_rvc4 (); |
| dcl_rvc8 (); |
| |
| dcl_rvs1 (); |
| dcl_rvs2 (); |
| dcl_rvs4 (); |
| dcl_rvs8 (); |
| |
| dcl_rvi1 (); |
| dcl_rvi2 (); |
| dcl_rvi4 (); |
| dcl_rvi8 (); |
| |
| dcl_rvll1 (); |
| dcl_rvll2 (); |
| dcl_rvll4 (); |
| dcl_rvll8 (); |
| |
| dcl_rvf1 (); |
| dcl_rvf2 (); |
| dcl_rvf4 (); |
| dcl_rvf8 (); |
| |
| dcl_rvd1 (); |
| dcl_rvd2 (); |
| dcl_rvd4 (); |
| dcl_rvd8 (); |
| } |
| |
| #define M(T, V) ({T t;t[0]= V;t;}) |
| |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvc1 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vc1 dfn_rvc1 (void) |
| { |
| return M (vc1, 1); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvc2 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vc2 dfn_rvc2 (void) |
| { |
| return M (vc2, 2); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvc4 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vc4 dfn_rvc4 (void) |
| { |
| return M (vc4, 3); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvc8 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vc8 dfn_rvc8 (void) |
| { |
| return M (vc8, 4); |
| } |
| |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvs1 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vs1 dfn_rvs1 (void) |
| { |
| return M (vs1, 5); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvs2 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vs2 dfn_rvs2 (void) |
| { |
| return M (vs2, 6); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvs4 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vs4 dfn_rvs4 (void) |
| { |
| return M (vs4, 7); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvs8 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vs8 dfn_rvs8 (void) |
| { |
| return M (vs8, 8); |
| } |
| |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvi1 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vi1 dfn_rvi1 (void) |
| { |
| return M (vi1, 9); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvi2 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vi2 dfn_rvi2 (void) |
| { |
| return M (vi2, 10); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvi4 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vi4 dfn_rvi4 (void) |
| { |
| return M (vi4, 11); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvi8 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vi8 dfn_rvi8 (void) |
| { |
| return M (vi8, 12); |
| } |
| |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvll1 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vll1 dfn_rvll1 (void) |
| { |
| return M (vll1, 13); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvll2 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vll2 dfn_rvll2 (void) |
| { |
| return M (vll2, 14); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvll4 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vll4 dfn_rvll4 (void) |
| { |
| return M (vll4, 16); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvll8 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vll8 dfn_rvll8 (void) |
| { |
| return M (vll8, 6); |
| } |
| |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvf1 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vf1 dfn_rvf1 (void) |
| { |
| return M (vf1, 17); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvf2 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vf2 dfn_rvf2 (void) |
| { |
| return M (vf2, 18); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvf4 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vf4 dfn_rvf4 (void) |
| { |
| return M (vf4, 19); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvf8 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vf8 dfn_rvf8 (void) |
| { |
| return M (vf8, 20); |
| } |
| |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvd1 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vd1 dfn_rvd1 (void) |
| { |
| return M (vd1, 21); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvd2 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vd2 dfn_rvd2 (void) |
| { |
| return M (vd2, 22); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvd4 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vd4 dfn_rvd4 (void) |
| { |
| return M (vd4, 23); |
| } |
| /* { dg-final { scan-assembler-times ".visible .func dfn_rvd8 \\(.param.u64 %\[_a-z0-9\]*\\)(?:;|\[\r\n\]+\{)" 2 } } */ |
| vd8 dfn_rvd8 (void) |
| { |
| return M (vd8, 24); |
| } |