1  /* { dg-do assemble } */
       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 "-save-temps -O2 -mfloat-abi=hard" }  */
       6  /* { dg-final { check-function-bodies "**" "" } } */
       7  
       8  #include "arm_neon.h"
       9  
      10  /*
      11  **test_vfmabq_f32:
      12  **      ...
      13  **      vfmab.bf16	q0, q1, q2
      14  **      bx	lr
      15  */
      16  float32x4_t
      17  test_vfmabq_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x8_t b)
      18  {
      19    return vbfmlalbq_f32 (r, a, b);
      20  }
      21  
      22  /*
      23  **test_vfmatq_f32:
      24  **      ...
      25  **      vfmat.bf16	q0, q1, q2
      26  **      bx	lr
      27  */
      28  float32x4_t
      29  test_vfmatq_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x8_t b)
      30  {
      31    return vbfmlaltq_f32 (r, a, b);
      32  }
      33  
      34  /*
      35  **test_vfmabq_lane_f32:
      36  **      ...
      37  **      vfmab.bf16	q0, q1, d4\[0\]
      38  **      bx	lr
      39  */
      40  float32x4_t
      41  test_vfmabq_lane_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x4_t b)
      42  {
      43    return vbfmlalbq_lane_f32 (r, a, b, 0);
      44  }
      45  
      46  /*
      47  **test_vfmatq_lane_f32:
      48  **      ...
      49  **      vfmat.bf16	q0, q1, d4\[2\]
      50  **      bx	lr
      51  */
      52  float32x4_t
      53  test_vfmatq_lane_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x4_t b)
      54  {
      55    return vbfmlaltq_lane_f32 (r, a, b, 2);
      56  }
      57  
      58  /*
      59  **test_vfmabq_laneq_f32:
      60  **      ...
      61  **      vfmab.bf16	q0, q1, d5\[1\]
      62  **      bx	lr
      63  */
      64  float32x4_t
      65  test_vfmabq_laneq_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x8_t b)
      66  {
      67    return vbfmlalbq_laneq_f32 (r, a, b, 5);
      68  }
      69  
      70  /*
      71  **test_vfmatq_laneq_f32:
      72  **      ...
      73  **      vfmat.bf16	q0, q1, d5\[3\]
      74  **      bx	lr
      75  */
      76  float32x4_t
      77  test_vfmatq_laneq_f32 (float32x4_t r, bfloat16x8_t a, bfloat16x8_t b)
      78  {
      79    return vbfmlaltq_laneq_f32 (r, a, b, 7);
      80  }