(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
mops_4.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -march=armv8.6-a+mops" } */
       3  /* { dg-final { check-function-bodies "**" "" "" { target lp64 } } } */
       4  
       5  /*
       6  ** copy1:
       7  **	mov	(x[0-9]+), x0
       8  **	cpyfp	\[\1\]!, \[x1\]!, x2!
       9  **	cpyfm	\[\1\]!, \[x1\]!, x2!
      10  **	cpyfe	\[\1\]!, \[x1\]!, x2!
      11  **	str	x0, \[x3\]
      12  **	ret
      13  */
      14  void
      15  copy1 (int *x, int *y, long z, int **res)
      16  {
      17    __builtin_memcpy (x, y, z);
      18    *res = x;
      19  }
      20  
      21  /*
      22  ** copy2:
      23  **	mov	(x[0-9]+), x1
      24  **	cpyfp	\[x0\]!, \[\1\]!, x2!
      25  **	cpyfm	\[x0\]!, \[\1\]!, x2!
      26  **	cpyfe	\[x0\]!, \[\1\]!, x2!
      27  **	str	x1, \[x3\]
      28  **	ret
      29  */
      30  void
      31  copy2 (int *x, int *y, long z, int **res)
      32  {
      33    __builtin_memcpy (x, y, z);
      34    *res = y;
      35  }
      36  
      37  /*
      38  ** copy3:
      39  **	mov	(x[0-9]+), x2
      40  **	cpyfp	\[x0\]!, \[x1\]!, \1!
      41  **	cpyfm	\[x0\]!, \[x1\]!, \1!
      42  **	cpyfe	\[x0\]!, \[x1\]!, \1!
      43  **	str	x2, \[x3\]
      44  **	ret
      45  */
      46  void
      47  copy3 (int *x, int *y, long z, long *res)
      48  {
      49    __builtin_memcpy (x, y, z);
      50    *res = z;
      51  }
      52  
      53  /*
      54  ** set1:
      55  **	mov	(x[0-9]+), x0
      56  **	setp	\[\1\]!, x2!, x1
      57  **	setm	\[\1\]!, x2!, x1
      58  **	sete	\[\1\]!, x2!, x1
      59  **	str	x0, \[x3\]
      60  **	ret
      61  */
      62  void
      63  set1 (char *x, char y, long z, char **res)
      64  {
      65    __builtin_memset (x, y, z);
      66    *res = x;
      67  }
      68  
      69  /*
      70  ** set2:
      71  **	ldrb	w([0-9]+), \[x1\]
      72  **	setp	\[x0\]!, x2!, x\1
      73  **	setm	\[x0\]!, x2!, x\1
      74  **	sete	\[x0\]!, x2!, x\1
      75  **	strb	w\1, \[x3\]
      76  **	ret
      77  */
      78  void
      79  set2 (char *x, char *yptr, long z, char *res)
      80  {
      81    char y = *yptr;
      82    __builtin_memset (x, y, z);
      83    *res = y;
      84  }
      85  
      86  /*
      87  ** set3:
      88  **	mov	(x[0-9]+), x2
      89  **	setp	\[x0\]!, \1!, x1
      90  **	setm	\[x0\]!, \1!, x1
      91  **	sete	\[x0\]!, \1!, x1
      92  **	str	x2, \[x3\]
      93  **	ret
      94  */
      95  void
      96  set3 (char *x, char y, long z, long *res)
      97  {
      98    __builtin_memset (x, y, z);
      99    *res = z;
     100  }
     101  
     102  /*
     103  ** set4:
     104  **	setp	\[x0\]!, x1!, xzr
     105  **	setm	\[x0\]!, x1!, xzr
     106  **	sete	\[x0\]!, x1!, xzr
     107  **	strb	wzr, \[x2\]
     108  **	ret
     109  */
     110  void
     111  set4 (char *x, long z, char *res)
     112  {
     113    __builtin_memset (x, 0, z);
     114    *res = 0;
     115  }