(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
pcs/
args_5_le_s16.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  **	st2h	{\2\.h - \1\.h}, p0, \[x0\]
      13  ** |
      14  **	ldr	(z[0-9]+), \[x1\]
      15  **	ldr	(z[0-9]+), \[x1, #1, mul vl\]
      16  **	st2h	{\3\.h - \4\.h}, p0, \[x0\]
      17  ** )
      18  **	st4h	{z0\.h - z3\.h}, p1, \[x0\]
      19  **	st3h	{z4\.h - z6\.h}, p2, \[x0\]
      20  **	st1h	z7\.h, p3, \[x0\]
      21  **	ret
      22  */
      23  void __attribute__((noipa))
      24  callee (void *x0, svint16x4_t z0, svint16x3_t z4, svint16x2_t stack,
      25  	svint16_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_s16 (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_s16 (pg, x0, -8),
      40  	  svld3_vnum_s16 (pg, x0, -3),
      41  	  svld2_vnum_s16 (pg, x0, 0),
      42  	  svld1_vnum_s16 (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 {\tld4h\t{z0\.h - z3\.h}, p[0-7]/z, \[x0, #-8, mul vl\]\n} } } */
      50  /* { dg-final { scan-assembler {\tld3h\t{z4\.h - z6\.h}, p[0-7]/z, \[x0, #-3, mul vl\]\n} } } */
      51  /* { dg-final { scan-assembler {\tld1h\tz7\.h, p[0-7]/z, \[x0, #2, mul vl\]\n} } } */
      52  /* { dg-final { scan-assembler {\tmov\tx1, sp\n} } } */
      53  /* { dg-final { scan-assembler {\tld2h\t{(z[0-9]+)\.h - z[0-9]+\.h}.*\tstr\t\1, \[x1\]\n} } } */
      54  /* { dg-final { scan-assembler {\tld2h\t{z[0-9]+\.h - (z[0-9]+)\.h}.*\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} } } */