(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
bfloat16_scalar_2.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  #pragma GCC push_options
       9  #pragma GCC target ("+bf16")
      10  
      11  /*
      12  **stacktest1:
      13  **	sub	sp, sp, #16
      14  **	str	h0, \[sp, 14\]
      15  **	ldr	h0, \[sp, 14\]
      16  **	add	sp, sp, 16
      17  **	ret
      18  */
      19  bfloat16_t stacktest1 (bfloat16_t __a)
      20  {
      21    volatile bfloat16_t b = __a;
      22    return b;
      23  }
      24  
      25  /*
      26  **bfloat_mov_ww:
      27  **	mov	v1.h\[0\], v2.h\[0\]
      28  **	ret
      29  */
      30  void bfloat_mov_ww (void)
      31  {
      32    register bfloat16_t x asm ("h2");
      33    register bfloat16_t y asm ("h1");
      34    asm volatile ("" : "=w" (x));
      35    y = x;
      36    asm volatile ("" :: "w" (y));
      37  }
      38  
      39  /*
      40  **bfloat_mov_rw:
      41  **	dup	v1.4h, w1
      42  **	ret
      43  */
      44  void bfloat_mov_rw (void)
      45  {
      46    register bfloat16_t x asm ("w1");
      47    register bfloat16_t y asm ("h1");
      48    asm volatile ("" : "=r" (x));
      49    y = x;
      50    asm volatile ("" :: "w" (y));
      51  }
      52  
      53  /*
      54  **bfloat_mov_wr:
      55  **	umov	w1, v1.h\[0\]
      56  **	ret
      57  */
      58  void bfloat_mov_wr (void)
      59  {
      60    register bfloat16_t x asm ("h1");
      61    register bfloat16_t y asm ("w1");
      62    asm volatile ("" : "=w" (x));
      63    y = x;
      64    asm volatile ("" :: "r" (y));
      65  }
      66  
      67  /*
      68  **bfloat_mov_rr:
      69  **	mov	w1, w2
      70  **	ret
      71  */
      72  void bfloat_mov_rr (void)
      73  {
      74    register bfloat16_t x asm ("w2");
      75    register bfloat16_t y asm ("w1");
      76    asm volatile ("" : "=r" (x));
      77    y = x;
      78    asm volatile ("" :: "r" (y));
      79  }
      80  
      81  /*
      82  **bfloat_mov_rm:
      83  **	strh	w2, \[x0\]
      84  **	ret
      85  */
      86  void bfloat_mov_rm (bfloat16_t *ptr)
      87  {
      88     register bfloat16_t x asm ("w2");
      89     asm volatile ("" : "=r" (x));
      90     *ptr = x;
      91  }
      92  
      93  /*
      94  **bfloat_mov_mr:
      95  **	ldrh	w2, \[x0\]
      96  **	ret
      97  */
      98  void bfloat_mov_mr (bfloat16_t *ptr)
      99  {
     100     register bfloat16_t y asm ("w2");
     101     y = *ptr;
     102     asm volatile ("" :: "r" (y));
     103  }
     104  
     105  #pragma GCC pop_options
     106