Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.target/aarch64/sve/pcs/return_6_1024.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
/* { dg-do compile } */ /* { dg-options "-O -msve-vector-bits=1024 -g" } */ /* { dg-final { check-function-bodies "**" "" { target lp64 } } } */ #include <stdint.h> typedef int8_t svint8_t __attribute__ ((vector_size (128))); typedef uint8_t svuint8_t __attribute__ ((vector_size (128))); typedef int16_t svint16_t __attribute__ ((vector_size (128))); typedef uint16_t svuint16_t __attribute__ ((vector_size (128))); typedef __fp16 svfloat16_t __attribute__ ((vector_size (128))); typedef __bf16 svbfloat16_t __attribute__ ((vector_size (128))); typedef int32_t svint32_t __attribute__ ((vector_size (128))); typedef uint32_t svuint32_t __attribute__ ((vector_size (128))); typedef float svfloat32_t __attribute__ ((vector_size (128))); typedef int64_t svint64_t __attribute__ ((vector_size (128))); typedef uint64_t svuint64_t __attribute__ ((vector_size (128))); typedef double svfloat64_t __attribute__ ((vector_size (128))); #define CALLEE(SUFFIX, TYPE) \ TYPE __attribute__((noipa)) \ callee_##SUFFIX (TYPE *ptr) \ { \ return *ptr; \ } /* ** callee_s8: ** ptrue (p[0-7])\.b, vl128 ** ld1b z0\.b, \1/z, \[x0\] ** st1b z0\.b, \1, \[x8\] ** ret */ CALLEE (s8, svint8_t) /* ** callee_u8: ** ptrue (p[0-7])\.b, vl128 ** ld1b z0\.b, \1/z, \[x0\] ** st1b z0\.b, \1, \[x8\] ** ret */ CALLEE (u8, svuint8_t) /* ** callee_s16: ** ptrue (p[0-7])\.b, vl128 ** ld1h z0\.h, \1/z, \[x0\] ** st1h z0\.h, \1, \[x8\] ** ret */ CALLEE (s16, svint16_t) /* ** callee_u16: ** ptrue (p[0-7])\.b, vl128 ** ld1h z0\.h, \1/z, \[x0\] ** st1h z0\.h, \1, \[x8\] ** ret */ CALLEE (u16, svuint16_t) /* ** callee_f16: ** ptrue (p[0-7])\.b, vl128 ** ld1h z0\.h, \1/z, \[x0\] ** st1h z0\.h, \1, \[x8\] ** ret */ CALLEE (f16, svfloat16_t) /* ** callee_bf16: ** ptrue (p[0-7])\.b, vl128 ** ld1h z0\.h, \1/z, \[x0\] ** st1h z0\.h, \1, \[x8\] ** ret */ CALLEE (bf16, svbfloat16_t) /* ** callee_s32: ** ptrue (p[0-7])\.b, vl128 ** ld1w z0\.s, \1/z, \[x0\] ** st1w z0\.s, \1, \[x8\] ** ret */ CALLEE (s32, svint32_t) /* ** callee_u32: ** ptrue (p[0-7])\.b, vl128 ** ld1w z0\.s, \1/z, \[x0\] ** st1w z0\.s, \1, \[x8\] ** ret */ CALLEE (u32, svuint32_t) /* ** callee_f32: ** ptrue (p[0-7])\.b, vl128 ** ld1w z0\.s, \1/z, \[x0\] ** st1w z0\.s, \1, \[x8\] ** ret */ CALLEE (f32, svfloat32_t) /* ** callee_s64: ** ptrue (p[0-7])\.b, vl128 ** ld1d z0\.d, \1/z, \[x0\] ** st1d z0\.d, \1, \[x8\] ** ret */ CALLEE (s64, svint64_t) /* ** callee_u64: ** ptrue (p[0-7])\.b, vl128 ** ld1d z0\.d, \1/z, \[x0\] ** st1d z0\.d, \1, \[x8\] ** ret */ CALLEE (u64, svuint64_t) /* ** callee_f64: ** ptrue (p[0-7])\.b, vl128 ** ld1d z0\.d, \1/z, \[x0\] ** st1d z0\.d, \1, \[x8\] ** ret */ CALLEE (f64, svfloat64_t) #define CALLER(SUFFIX, TYPE) \ void __attribute__((noipa)) \ caller_##SUFFIX (TYPE *ptr1, TYPE *ptr2) \ { \ *ptr2 = callee_##SUFFIX (ptr1); \ } /* ** caller_s8: ** ... ** bl callee_s8 ** ... ** ld1b (z[0-9]+\.b), (p[0-7])/z, \[[^]]*\] ** st1b \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (s8, svint8_t) /* ** caller_u8: ** ... ** bl callee_u8 ** ... ** ld1b (z[0-9]+\.b), (p[0-7])/z, \[[^]]*\] ** st1b \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (u8, svuint8_t) /* ** caller_s16: ** ... ** bl callee_s16 ** ... ** ld1h (z[0-9]+\.h), (p[0-7])/z, \[[^]]*\] ** st1h \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (s16, svint16_t) /* ** caller_u16: ** ... ** bl callee_u16 ** ... ** ld1h (z[0-9]+\.h), (p[0-7])/z, \[[^]]*\] ** st1h \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (u16, svuint16_t) /* ** caller_f16: ** ... ** bl callee_f16 ** ... ** ld1h (z[0-9]+\.h), (p[0-7])/z, \[[^]]*\] ** st1h \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (f16, svfloat16_t) /* ** caller_bf16: ** ... ** bl callee_bf16 ** ... ** ld1h (z[0-9]+\.h), (p[0-7])/z, \[[^]]*\] ** st1h \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (bf16, svbfloat16_t) /* ** caller_s32: ** ... ** bl callee_s32 ** ... ** ld1w (z[0-9]+\.s), (p[0-7])/z, \[[^]]*\] ** st1w \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (s32, svint32_t) /* ** caller_u32: ** ... ** bl callee_u32 ** ... ** ld1w (z[0-9]+\.s), (p[0-7])/z, \[[^]]*\] ** st1w \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (u32, svuint32_t) /* ** caller_f32: ** ... ** bl callee_f32 ** ... ** ld1w (z[0-9]+\.s), (p[0-7])/z, \[[^]]*\] ** st1w \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (f32, svfloat32_t) /* ** caller_s64: ** ... ** bl callee_s64 ** ... ** ld1d (z[0-9]+\.d), (p[0-7])/z, \[[^]]*\] ** st1d \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (s64, svint64_t) /* ** caller_u64: ** ... ** bl callee_u64 ** ... ** ld1d (z[0-9]+\.d), (p[0-7])/z, \[[^]]*\] ** st1d \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (u64, svuint64_t) /* ** caller_f64: ** ... ** bl callee_f64 ** ... ** ld1d (z[0-9]+\.d), (p[0-7])/z, \[[^]]*\] ** st1d \1, \2, \[[^]]*\] ** ... ** ret */ CALLER (f64, svfloat64_t)