1 /* { dg-options "-O -msve-vector-bits=256 -fomit-frame-pointer" } */ 2 3 #include <arm_sve.h> 4 5 typedef bfloat16_t bfloat16x16_t __attribute__((vector_size (32))); 6 typedef float16_t float16x16_t __attribute__((vector_size (32))); 7 typedef float32_t float32x8_t __attribute__((vector_size (32))); 8 typedef float64_t float64x4_t __attribute__((vector_size (32))); 9 typedef int8_t int8x32_t __attribute__((vector_size (32))); 10 typedef int16_t int16x16_t __attribute__((vector_size (32))); 11 typedef int32_t int32x8_t __attribute__((vector_size (32))); 12 typedef int64_t int64x4_t __attribute__((vector_size (32))); 13 typedef uint8_t uint8x32_t __attribute__((vector_size (32))); 14 typedef uint16_t uint16x16_t __attribute__((vector_size (32))); 15 typedef uint32_t uint32x8_t __attribute__((vector_size (32))); 16 typedef uint64_t uint64x4_t __attribute__((vector_size (32))); 17 18 void bfloat16_callee (svbfloat16_t); 19 void float16_callee (svfloat16_t); 20 void float32_callee (svfloat32_t); 21 void float64_callee (svfloat64_t); 22 void int8_callee (svint8_t); 23 void int16_callee (svint16_t); 24 void int32_callee (svint32_t); 25 void int64_callee (svint64_t); 26 void uint8_callee (svuint8_t); 27 void uint16_callee (svuint16_t); 28 void uint32_callee (svuint32_t); 29 void uint64_callee (svuint64_t); 30 31 void bfloat16_caller(bfloat16x16_t arg)32bfloat16_caller (bfloat16x16_t arg) 33 { 34 bfloat16_callee (arg); 35 } 36 37 void float16_caller(float16x16_t arg)38float16_caller (float16x16_t arg) 39 { 40 float16_callee (arg); 41 } 42 43 void float32_caller(float32x8_t arg)44float32_caller (float32x8_t arg) 45 { 46 float32_callee (arg); 47 } 48 49 void float64_caller(float64x4_t arg)50float64_caller (float64x4_t arg) 51 { 52 float64_callee (arg); 53 } 54 55 void int8_caller(int8x32_t arg)56int8_caller (int8x32_t arg) 57 { 58 int8_callee (arg); 59 } 60 61 void int16_caller(int16x16_t arg)62int16_caller (int16x16_t arg) 63 { 64 int16_callee (arg); 65 } 66 67 void int32_caller(int32x8_t arg)68int32_caller (int32x8_t arg) 69 { 70 int32_callee (arg); 71 } 72 73 void int64_caller(int64x4_t arg)74int64_caller (int64x4_t arg) 75 { 76 int64_callee (arg); 77 } 78 79 void uint8_caller(uint8x32_t arg)80uint8_caller (uint8x32_t arg) 81 { 82 uint8_callee (arg); 83 } 84 85 void uint16_caller(uint16x16_t arg)86uint16_caller (uint16x16_t arg) 87 { 88 uint16_callee (arg); 89 } 90 91 void uint32_caller(uint32x8_t arg)92uint32_caller (uint32x8_t arg) 93 { 94 uint32_callee (arg); 95 } 96 97 void uint64_caller(uint64x4_t arg)98uint64_caller (uint64x4_t arg) 99 { 100 uint64_callee (arg); 101 } 102 103 /* { dg-final { scan-assembler-times {\tld1b\tz0\.b, p[0-7]/z, \[x0\]} 2 } } */ 104 /* { dg-final { scan-assembler-times {\tld1h\tz0\.h, p[0-7]/z, \[x0\]} 4 } } */ 105 /* { dg-final { scan-assembler-times {\tld1w\tz0\.s, p[0-7]/z, \[x0\]} 3 } } */ 106 /* { dg-final { scan-assembler-times {\tld1d\tz0\.d, p[0-7]/z, \[x0\]} 3 } } */ 107 /* { dg-final { scan-assembler-not {\tst1[bhwd]\t} } } */ 108