view gcc/testsuite/gcc.target/aarch64/sve/pcs/struct.h @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
line wrap: on
line source

#ifndef STRUCT_H
#define STRUCT_H 1

#include <arm_sve.h>

#ifndef __ARM_FEATURE_SVE_BITS
#error "__ARM_FEATURE_SVE_BITS should be defined"
#endif

#define FIXED_ATTR \
  __attribute__ ((arm_sve_vector_bits (__ARM_FEATURE_SVE_BITS)))

#define SVE_BYTES (__ARM_FEATURE_SVE_BITS / 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;

/* Define an asm function called NAME with return type RET_TYPE and
   argument list ARG_TYPES.  INSNS contains the body of the function,
   except for the final "ret".

   Conservatively mark the function as a variant PCS function,
   since many uses are.  */
#define ASM_FUNCTION(NAME, RET_TYPE, ARG_TYPES, INSNS) \
extern RET_TYPE NAME ARG_TYPES;			\
  asm(						\
"	.type	" #NAME ", %function\n"		\
#NAME ":\n"					\
"	" INSNS "\n"				\
"	ret\n"					\
"	.size	" #NAME ", .-" #NAME "\n"	\
"	.variant_pcs " #NAME "\n"		\
)

/* Set the argument registers to fixed values.  */
#define CLEANSE								\
  asm volatile ("mov\tx0, #-1\n\t"					\
		"mov\tx1, #-1\n\t"					\
		"mov\tx2, #-1\n\t"					\
		"mov\tx3, #-1\n\t"					\
		"mov\tx4, #-1\n\t"					\
		"mov\tx5, #-1\n\t"					\
		"mov\tx6, #-1\n\t"					\
		"mov\tx7, #-1\n\t"					\
		"mov\tx8, #-1\n\t"					\
		"mov\tz0.b, #0xaf\n\t"					\
		"mov\tz1.b, #0xaf\n\t"					\
		"mov\tz2.b, #0xaf\n\t"					\
		"mov\tz3.b, #0xaf\n\t"					\
		"mov\tz4.b, #0xaf\n\t"					\
		"mov\tz5.b, #0xaf\n\t"					\
		"mov\tz6.b, #0xaf\n\t"					\
		"mov\tz7.b, #0xaf\n\t"					\
		"pfalse\tp0.b\n\t"					\
		"pfalse\tp1.b\n\t"					\
		"pfalse\tp2.b\n\t"					\
		"pfalse\tp3.b"						\
		:::							\
		"x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8",	\
		"z0", "z1", "z2", "z3", "z4", "z5", "z6", "z7",		\
		"p0", "p1", "p2", "p3")

#endif