(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
pcs/
args_5_le_u8.c
       1  /* { dg-do compile { target lp64 } } */
       2  /* { dg-options "-O -mlittle-endian -fno-stack-clash-protection -g" } */
       3  /* { dg-final { check-function-bodies "**" "" } } */
       4  
       5  #pragma GCC aarch64 "arm_sve.h"
       6  
       7  /*
       8  ** callee:
       9  ** (
      10  **	ldr	(z[0-9]+), \[x1, #1, mul vl\]
      11  **	ldr	(z[0-9]+), \[x1\]
      12  **	st2b	{\2\.b - \1\.b}, p0, \[x0\]
      13  ** |
      14  **	ldr	(z[0-9]+), \[x1\]
      15  **	ldr	(z[0-9]+), \[x1, #1, mul vl\]
      16  **	st2b	{\3\.b - \4\.b}, p0, \[x0\]
      17  ** )
      18  **	st4b	{z0\.b - z3\.b}, p1, \[x0\]
      19  **	st3b	{z4\.b - z6\.b}, p2, \[x0\]
      20  **	st1b	z7\.b, p3, \[x0\]
      21  **	ret
      22  */
      23  void __attribute__((noipa))
      24  callee (void *x0, svuint8x4_t z0, svuint8x3_t z4, svuint8x2_t stack,
      25  	svuint8_t z7, svbool_t p0, svbool_t p1, svbool_t p2, svbool_t p3)
      26  {
      27    svst2 (p0, x0, stack);
      28    svst4 (p1, x0, z0);
      29    svst3 (p2, x0, z4);
      30    svst1_u8 (p3, x0, z7);
      31  }
      32  
      33  void __attribute__((noipa))
      34  caller (void *x0)
      35  {
      36    svbool_t pg;
      37    pg = svptrue_b8 ();
      38    callee (x0,
      39  	  svld4_vnum_u8 (pg, x0, -8),
      40  	  svld3_vnum_u8 (pg, x0, -3),
      41  	  svld2_vnum_u8 (pg, x0, 0),
      42  	  svld1_vnum_u8 (pg, x0, 2),
      43  	  svptrue_pat_b8 (SV_VL1),
      44  	  svptrue_pat_b16 (SV_VL2),
      45  	  svptrue_pat_b32 (SV_VL3),
      46  	  svptrue_pat_b64 (SV_VL4));
      47  }
      48  
      49  /* { dg-final { scan-assembler {\tld4b\t{z0\.b - z3\.b}, p[0-7]/z, \[x0, #-8, mul vl\]\n} } } */
      50  /* { dg-final { scan-assembler {\tld3b\t{z4\.b - z6\.b}, p[0-7]/z, \[x0, #-3, mul vl\]\n} } } */
      51  /* { dg-final { scan-assembler {\tld1b\tz7\.b, p[0-7]/z, \[x0, #2, mul vl\]\n} } } */
      52  /* { dg-final { scan-assembler {\tmov\tx1, sp\n} } } */
      53  /* { dg-final { scan-assembler {\tld2b\t{(z[0-9]+)\.b - z[0-9]+\.b}.*\tstr\t\1, \[x1\]\n} } } */
      54  /* { dg-final { scan-assembler {\tld2b\t{z[0-9]+\.b - (z[0-9]+)\.b}.*\tstr\t\1, \[x1, #1, mul vl\]\n} } } */
      55  /* { dg-final { scan-assembler {\tptrue\tp0\.b, vl1\n} } } */
      56  /* { dg-final { scan-assembler {\tptrue\tp1\.h, vl2\n} } } */
      57  /* { dg-final { scan-assembler {\tptrue\tp2\.s, vl3\n} } } */
      58  /* { dg-final { scan-assembler {\tptrue\tp3\.d, vl4\n} } } */