Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_1.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.target/aarch64/sve/acle/general/attributes_1.c Mon May 25 07:50:57 2020 +0900 @@ -0,0 +1,205 @@ +/* { dg-options "-msve-vector-bits=256" } */ + +#include <arm_sve.h> + +#ifndef __ARM_FEATURE_SVE_BITS +#error "__ARM_FEATURE_SVE_BITS is not defined but should be" +#endif + +#if __ARM_FEATURE_SVE_VECTOR_OPERATIONS != 1 +#error "__ARM_FEATURE_SVE_VECTOR_OPERATIONS should be equal to 1" +#endif + +#ifndef __cplusplus +#define alignof _Alignof +#endif + +#define N __ARM_FEATURE_SVE_BITS +#define FIXED_ATTR __attribute__ ((arm_sve_vector_bits (N))) +#define GNU_ATTR __attribute__ ((vector_size (N / 8))) + +typedef svint8_t fixed_int8_t FIXED_ATTR; +typedef svint16_t fixed_int16_t FIXED_ATTR; +typedef svint32_t fixed_int32_t FIXED_ATTR; +typedef svint64_t fixed_int64_t FIXED_ATTR; + +typedef svuint8_t fixed_uint8_t FIXED_ATTR; +typedef svuint16_t fixed_uint16_t FIXED_ATTR; +typedef svuint32_t fixed_uint32_t FIXED_ATTR; +typedef svuint64_t fixed_uint64_t FIXED_ATTR; + +typedef svbfloat16_t fixed_bfloat16_t FIXED_ATTR; +typedef svfloat16_t fixed_float16_t FIXED_ATTR; +typedef svfloat32_t fixed_float32_t FIXED_ATTR; +typedef svfloat64_t fixed_float64_t FIXED_ATTR; + +typedef svbool_t fixed_bool_t FIXED_ATTR; + +typedef int8_t gnu_int8_t GNU_ATTR; +typedef int16_t gnu_int16_t GNU_ATTR; +typedef int32_t gnu_int32_t GNU_ATTR; +typedef int64_t gnu_int64_t GNU_ATTR; + +typedef uint8_t gnu_uint8_t GNU_ATTR; +typedef uint16_t gnu_uint16_t GNU_ATTR; +typedef uint32_t gnu_uint32_t GNU_ATTR; +typedef uint64_t gnu_uint64_t GNU_ATTR; + +typedef bfloat16_t gnu_bfloat16_t GNU_ATTR; +typedef float16_t gnu_float16_t GNU_ATTR; +typedef float32_t gnu_float32_t GNU_ATTR; +typedef float64_t gnu_float64_t GNU_ATTR; + +void f() { +#define TEST_VECTOR(TYPE) \ + do \ + { \ + int assert_sizeof[sizeof (TYPE) == N / 8 ? 1 : -1]; \ + int assert_alignof[alignof (TYPE) == 16 ? 1 : -1]; \ + } \ + while (0) + + TEST_VECTOR (fixed_int8_t); + TEST_VECTOR (fixed_int16_t); + TEST_VECTOR (fixed_int32_t); + TEST_VECTOR (fixed_int64_t); + + TEST_VECTOR (fixed_uint8_t); + TEST_VECTOR (fixed_uint16_t); + TEST_VECTOR (fixed_uint32_t); + TEST_VECTOR (fixed_uint64_t); + + TEST_VECTOR (fixed_bfloat16_t); + TEST_VECTOR (fixed_float16_t); + TEST_VECTOR (fixed_float32_t); + TEST_VECTOR (fixed_float64_t); + +#undef TEST_VECTOR + + { + int assert_sizeof[sizeof(fixed_bool_t) == N / 64 ? 1 : -1]; + int assert_alignof[alignof(fixed_bool_t) == 2 ? 1 : -1]; + } +} + +#define TEST_GLOBAL(TYPE) \ + extern fixed_##TYPE extern_##TYPE; \ + fixed_##TYPE global_##TYPE; + +#define TEST_STRUCT(TYPE) \ + struct struct_##TYPE \ + { \ + fixed_##TYPE a, b, c[3]; \ + }; \ + \ + union union_##TYPE \ + { \ + fixed_##TYPE a, b, c[3]; \ + }; + +#define TEST_CONVERT(TYPE, PREFIX) \ + PREFIX##TYPE \ + to_##PREFIX##TYPE (fixed_##TYPE x) \ + { \ + return x; \ + } \ + \ + fixed_##TYPE \ + from_##PREFIX##TYPE (PREFIX##TYPE x) \ + { \ + return x; \ + } + +#define TEST_UNARY(TYPE, NAME, OP) \ + fixed_##TYPE \ + NAME##_##TYPE (fixed_##TYPE x) \ + { \ + return OP x; \ + } + +#define TEST_BINARY(TYPE, NAME, OP) \ + fixed_##TYPE \ + NAME##_##TYPE (fixed_##TYPE x, fixed_##TYPE y) \ + { \ + return x OP y; \ + } \ + \ + fixed_##TYPE \ + NAME##_##TYPE##_eq (fixed_##TYPE x, fixed_##TYPE y) \ + { \ + x OP##= y; return x; \ + } + +#define TEST_COMPARISON(TYPE, NAME, OP) \ + fixed_##TYPE \ + NAME##_##TYPE (fixed_##TYPE x, fixed_##TYPE y) \ + { \ + return x OP y; \ + } + +#define TEST_CALL(TYPE) \ + fixed_##TYPE \ + call_##TYPE##_ff (svbool_t pg, fixed_##TYPE x, fixed_##TYPE y) \ + { \ + return svsel (pg, x, y); \ + } \ + \ + fixed_##TYPE \ + call_##TYPE##_sf (svbool_t pg, sv##TYPE x, fixed_##TYPE y) \ + { \ + return svsel (pg, x, y); \ + } \ + \ + fixed_##TYPE \ + call_##TYPE##_fs (svbool_t pg, fixed_##TYPE x, sv##TYPE y) \ + { \ + return svsel (pg, x, y); \ + } + +#define TEST_COMMON(TYPE) \ + TEST_GLOBAL (TYPE) \ + TEST_STRUCT (TYPE) \ + TEST_CONVERT (TYPE, sv) \ + TEST_CALL (TYPE) + +#define TEST_VECTOR(TYPE) \ + TEST_COMMON (TYPE) \ + TEST_CONVERT (TYPE, gnu_) \ + TEST_UNARY (TYPE, nop, +) \ + TEST_UNARY (TYPE, neg, -) \ + TEST_BINARY (TYPE, add, +) \ + TEST_BINARY (TYPE, sub, -) \ + TEST_BINARY (TYPE, mul, *) \ + TEST_BINARY (TYPE, div, /) \ + +#define TEST_INT_VECTOR(TYPE) \ + TEST_VECTOR (TYPE) \ + TEST_UNARY (TYPE, inv, ~) \ + TEST_BINARY (TYPE, mod, %) \ + TEST_BINARY (TYPE, shl, <<) \ + TEST_BINARY (TYPE, shr, >>) \ + TEST_BINARY (TYPE, and, &) \ + TEST_BINARY (TYPE, ior, |) \ + TEST_BINARY (TYPE, xor, ^) \ + TEST_COMPARISON (TYPE, eq, =) \ + TEST_COMPARISON (TYPE, ne, !=) \ + TEST_COMPARISON (TYPE, lt, <) \ + TEST_COMPARISON (TYPE, le, <=) \ + TEST_COMPARISON (TYPE, ge, >=) \ + TEST_COMPARISON (TYPE, gt, >) + +TEST_INT_VECTOR (int8_t); +TEST_INT_VECTOR (int16_t); +TEST_INT_VECTOR (int32_t); +TEST_INT_VECTOR (int64_t); + +TEST_INT_VECTOR (uint8_t); +TEST_INT_VECTOR (uint16_t); +TEST_INT_VECTOR (uint32_t); +TEST_INT_VECTOR (uint64_t); + +TEST_VECTOR (float16_t); +TEST_VECTOR (float32_t); +TEST_VECTOR (float64_t); + +TEST_COMMON (bool_t)