(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
bfloat16_scalar_3.c
       1  /* { dg-do assemble { target { aarch64*-*-* } } } */
       2  /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
       3  /* { dg-additional-options "-march=armv8.2-a -O3 --save-temps -std=gnu90" } */
       4  /* { dg-final { check-function-bodies "**" "" } } */
       5  
       6  #include <arm_bf16.h>
       7  
       8  /*
       9  **stacktest1:
      10  **	sub	sp, sp, #16
      11  **	str	h0, \[sp, 14\]
      12  **	ldr	h0, \[sp, 14\]
      13  **	add	sp, sp, 16
      14  **	ret
      15  */
      16  bfloat16_t stacktest1 (bfloat16_t __a)
      17  {
      18    volatile bfloat16_t b = __a;
      19    return b;
      20  }
      21  
      22  /*
      23  **bfloat_mov_ww:
      24  **	mov	v1.h\[0\], v2.h\[0\]
      25  **	ret
      26  */
      27  void bfloat_mov_ww (void)
      28  {
      29    register bfloat16_t x asm ("h2");
      30    register bfloat16_t y asm ("h1");
      31    asm volatile ("" : "=w" (x));
      32    y = x;
      33    asm volatile ("" :: "w" (y));
      34  }
      35  
      36  /*
      37  **bfloat_mov_rw:
      38  **	dup	v1.4h, w1
      39  **	ret
      40  */
      41  void bfloat_mov_rw (void)
      42  {
      43    register bfloat16_t x asm ("w1");
      44    register bfloat16_t y asm ("h1");
      45    asm volatile ("" : "=r" (x));
      46    y = x;
      47    asm volatile ("" :: "w" (y));
      48  }
      49  
      50  /*
      51  **bfloat_mov_wr:
      52  **	umov	w1, v1.h\[0\]
      53  **	ret
      54  */
      55  void bfloat_mov_wr (void)
      56  {
      57    register bfloat16_t x asm ("h1");
      58    register bfloat16_t y asm ("w1");
      59    asm volatile ("" : "=w" (x));
      60    y = x;
      61    asm volatile ("" :: "r" (y));
      62  }
      63  
      64  /*
      65  **bfloat_mov_rr:
      66  **	mov	w1, w2
      67  **	ret
      68  */
      69  void bfloat_mov_rr (void)
      70  {
      71    register bfloat16_t x asm ("w2");
      72    register bfloat16_t y asm ("w1");
      73    asm volatile ("" : "=r" (x));
      74    y = x;
      75    asm volatile ("" :: "r" (y));
      76  }
      77  
      78  /*
      79  **bfloat_mov_rm:
      80  **	strh	w2, \[x0\]
      81  **	ret
      82  */
      83  void bfloat_mov_rm (bfloat16_t *ptr)
      84  {
      85     register bfloat16_t x asm ("w2");
      86     asm volatile ("" : "=r" (x));
      87     *ptr = x;
      88  }
      89  
      90  /*
      91  **bfloat_mov_mr:
      92  **	ldrh	w2, \[x0\]
      93  **	ret
      94  */
      95  void bfloat_mov_mr (bfloat16_t *ptr)
      96  {
      97     register bfloat16_t y asm ("w2");
      98     y = *ptr;
      99     asm volatile ("" :: "r" (y));
     100  }
     101