(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
pcs/
asm_3.c
       1  /* { dg-do run { target aarch64_sve_hw } } */
       2  /* { dg-options "-O0 -ffixed-z0 -ffixed-p0" } */
       3  
       4  #include <arm_sve.h>
       5  
       6  #define ASM_FUNCTION(NAME, RET_TYPE, ARG_TYPE, INSN) \
       7  extern RET_TYPE NAME (svbool_t, ARG_TYPE);	\
       8    asm(						\
       9  "	.type	" #NAME ", %function\n"		\
      10  #NAME ":\n"					\
      11  "	" INSN "\n"				\
      12  "	ret\n"					\
      13  "	.size	" #NAME ", .-" #NAME "\n"	\
      14  )
      15  
      16  ASM_FUNCTION (u8_callee, svuint8_t, svuint8x2_t,
      17  	      "add z0.b, p0/m, z0.b, z1.b");
      18  ASM_FUNCTION (u16_callee, svuint16_t, svuint16x2_t,
      19  	      "add z0.h, p0/m, z0.h, z1.h");
      20  ASM_FUNCTION (u32_callee, svuint32_t, svuint32x2_t,
      21  	      "add z0.s, p0/m, z0.s, z1.s");
      22  ASM_FUNCTION (u64_callee, svuint64_t, svuint64x2_t,
      23  	      "add z0.d, p0/m, z0.d, z1.d");
      24  
      25  ASM_FUNCTION (s8_callee, svint8_t, svint8x2_t,
      26  	      "add z0.b, p0/m, z0.b, z1.b");
      27  ASM_FUNCTION (s16_callee, svint16_t, svint16x2_t,
      28  	      "add z0.h, p0/m, z0.h, z1.h");
      29  ASM_FUNCTION (s32_callee, svint32_t, svint32x2_t,
      30  	      "add z0.s, p0/m, z0.s, z1.s");
      31  ASM_FUNCTION (s64_callee, svint64_t, svint64x2_t,
      32  	      "add z0.d, p0/m, z0.d, z1.d");
      33  
      34  ASM_FUNCTION (f16_callee, svfloat16_t, svfloat16x2_t,
      35  	      "fadd z0.h, p0/m, z0.h, z1.h");
      36  ASM_FUNCTION (f32_callee, svfloat32_t, svfloat32x2_t,
      37  	      "fadd z0.s, p0/m, z0.s, z1.s");
      38  ASM_FUNCTION (f64_callee, svfloat64_t, svfloat64x2_t,
      39  	      "fadd z0.d, p0/m, z0.d, z1.d");
      40  
      41  int
      42  main (void)
      43  {
      44  #define CHECK(SUFFIX)							\
      45    if (svptest_any (svptrue_b8 (),					\
      46  		   svcmpne (svptrue_b8 (),				\
      47  			    SUFFIX##_callee (svptrue_b8 (),		\
      48  					     svcreate2 (svdup_##SUFFIX (3), \
      49  							svdup_##SUFFIX (6))), \
      50  			    svdup_##SUFFIX (9))))			\
      51      __builtin_abort ()
      52  
      53    CHECK (u8);
      54    CHECK (u16);
      55    CHECK (u32);
      56    CHECK (u64);
      57  
      58    CHECK (s8);
      59    CHECK (s16);
      60    CHECK (s32);
      61    CHECK (s64);
      62  
      63    CHECK (f16);
      64    CHECK (f32);
      65    CHECK (f64);
      66  
      67    return 0;
      68  }