(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
arm/
bfloat16_scalar_1_1.c
       1  /* { dg-do assemble { target { arm*-*-* } } } */
       2  /* { dg-require-effective-target arm_hard_ok } */
       3  /* { dg-require-effective-target arm_v8_2a_bf16_neon_ok } */
       4  /* { dg-add-options arm_v8_2a_bf16_neon }  */
       5  /* { dg-additional-options "-O3 --save-temps -std=gnu90 -mfloat-abi=hard" } */
       6  /* { dg-final { check-function-bodies "**" "" } } */
       7  
       8  #include <arm_bf16.h>
       9  
      10  /*
      11  **stacktest1:
      12  **	...
      13  **	vst1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
      14  **	vld1.16	{d[0-9]+\[[0-9]+\]}, \[r[0-9]+\]
      15  **	...
      16  **	bx	lr
      17  */
      18  bfloat16_t stacktest1 (bfloat16_t __a)
      19  {
      20    volatile bfloat16_t b = __a;
      21    return b;
      22  }
      23  
      24  /*
      25  **bfloat_mov_ww:
      26  **	...
      27  **	vmov.f32	s1, s15
      28  **	...
      29  **	bx	lr
      30  */
      31  void bfloat_mov_ww (void)
      32  {
      33    register bfloat16_t x asm ("s15");
      34    register bfloat16_t y asm ("s1");
      35    asm volatile ("#foo" : "=t" (x));
      36    y = x;
      37    asm volatile ("#foo" :: "t" (y));
      38  }
      39  
      40  /*
      41  **bfloat_mov_rw:
      42  **	...
      43  **	vmov	s1, r4
      44  **	...
      45  **	bx	lr
      46  */
      47  void bfloat_mov_rw (void)
      48  {
      49    register bfloat16_t x asm ("r4");
      50    register bfloat16_t y asm ("s1");
      51    asm volatile ("#foo" : "=r" (x));
      52    y = x;
      53    asm volatile ("#foo" :: "t" (y));
      54  }
      55  
      56  /*
      57  **bfloat_mov_wr:
      58  **	...
      59  **	vmov	r4, s1
      60  **	...
      61  **	bx	lr
      62  */
      63  void bfloat_mov_wr (void)
      64  {
      65    register bfloat16_t x asm ("s1");
      66    register bfloat16_t y asm ("r4");
      67    asm volatile ("#foo" : "=t" (x));
      68    y = x;
      69    asm volatile ("#foo" :: "r" (y));
      70  }
      71  
      72  /*
      73  **bfloat_mov_rr:
      74  **	...
      75  **	mov	r4, r5	@ __bf16
      76  **	...
      77  **	bx	lr
      78  */
      79  void bfloat_mov_rr (void)
      80  {
      81    register bfloat16_t x asm ("r5");
      82    register bfloat16_t y asm ("r4");
      83    asm volatile ("#foo" : "=r" (x));
      84    y = x;
      85    asm volatile ("#foo" :: "r" (y));
      86  }
      87  
      88  /*
      89  **bfloat_mov_rm:
      90  **	...
      91  **	strh	r4, \[.*\]	@ __bf16
      92  **	...
      93  **	bx	lr
      94  */
      95  void bfloat_mov_rm (void)
      96  {
      97    register bfloat16_t x asm ("r4");
      98    volatile bfloat16_t y;
      99    asm volatile ("#foo" : "=r" (x));
     100    y = x;
     101    asm volatile ("#foo" : : : "memory");
     102  }
     103  
     104  /*
     105  **bfloat_mov_mr:
     106  **	...
     107  **	ldrh	r4, \[.*\]	@ __bf16
     108  **	...
     109  **	bx	lr
     110  */
     111  void bfloat_mov_mr (void)
     112  {
     113    volatile bfloat16_t x;
     114    register bfloat16_t y asm ("r4");
     115    asm volatile ("#foo" : : : "memory");
     116    y = x;
     117    asm volatile ("#foo" :: "r" (y));
     118  }
     119