(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
advsimd-intrinsics/
vdot-3-2.c
       1  /* { dg-do assemble { target { aarch64*-*-* } } } */
       2  /* { dg-require-effective-target stdint_types_mbig_endian } */
       3  /* { dg-require-effective-target arm_v8_2a_i8mm_ok } */
       4  /* { dg-add-options arm_v8_2a_i8mm }  */
       5  /* { dg-additional-options "-mbig-endian -save-temps" } */
       6  /* { dg-final { check-function-bodies "**" "" {-O[^0]} } } */
       7  /* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } } */
       8  
       9  #include <arm_neon.h>
      10  
      11  /* Unsigned-Signed Dot Product instructions.  */
      12  
      13  /*
      14  **ufoo:
      15  **	usdot	v0\.2s, v1\.8b, v2\.8b
      16  **	ret
      17  */
      18  int32x2_t ufoo (int32x2_t r, uint8x8_t x, int8x8_t y)
      19  {
      20    return vusdot_s32 (r, x, y);
      21  }
      22  
      23  /*
      24  **ufooq:
      25  **	usdot	v0\.4s, v1\.16b, v2\.16b
      26  **	ret
      27  */
      28  int32x4_t ufooq (int32x4_t r, uint8x16_t x, int8x16_t y)
      29  {
      30    return vusdotq_s32 (r, x, y);
      31  }
      32  
      33  /*
      34  **ufoo_lane:
      35  **	usdot	v0\.2s, v1\.8b, v2\.4b\[0\]
      36  **	ret
      37  */
      38  int32x2_t ufoo_lane (int32x2_t r, uint8x8_t x, int8x8_t y)
      39  {
      40    return vusdot_lane_s32 (r, x, y, 0);
      41  }
      42  
      43  /*
      44  **ufoo_laneq:
      45  **	usdot	v0\.2s, v1\.8b, v2\.4b\[2\]
      46  **	ret
      47  */
      48  int32x2_t ufoo_laneq (int32x2_t r, uint8x8_t x, int8x16_t y)
      49  {
      50    return vusdot_laneq_s32 (r, x, y, 2);
      51  }
      52  
      53  /*
      54  **ufooq_lane:
      55  **	usdot	v0\.4s, v1\.16b, v2\.4b\[1\]
      56  **	ret
      57  */
      58  int32x4_t ufooq_lane (int32x4_t r, uint8x16_t x, int8x8_t y)
      59  {
      60    return vusdotq_lane_s32 (r, x, y, 1);
      61  }
      62  
      63  /*
      64  **ufooq_laneq:
      65  **	usdot	v0\.4s, v1\.16b, v2\.4b\[3\]
      66  **	ret
      67  */
      68  int32x4_t ufooq_laneq (int32x4_t r, uint8x16_t x, int8x16_t y)
      69  {
      70    return vusdotq_laneq_s32 (r, x, y, 3);
      71  }
      72  
      73  
      74  /* Signed-Unsigned Dot Product instructions.  */
      75  
      76  /*
      77  **sfoo_lane:
      78  **	sudot	v0\.2s, v1\.8b, v2\.4b\[0\]
      79  **	ret
      80  */
      81  int32x2_t sfoo_lane (int32x2_t r, int8x8_t x, uint8x8_t y)
      82  {
      83    return vsudot_lane_s32 (r, x, y, 0);
      84  }
      85  
      86  /*
      87  **sfoo_laneq:
      88  **	sudot	v0\.2s, v1\.8b, v2\.4b\[2\]
      89  **	ret
      90  */
      91  int32x2_t sfoo_laneq (int32x2_t r, int8x8_t x, uint8x16_t y)
      92  {
      93    return vsudot_laneq_s32 (r, x, y, 2);
      94  }
      95  
      96  /*
      97  **sfooq_lane:
      98  **	sudot	v0\.4s, v1\.16b, v2\.4b\[1\]
      99  **	ret
     100  */
     101  int32x4_t sfooq_lane (int32x4_t r, int8x16_t x, uint8x8_t y)
     102  {
     103    return vsudotq_lane_s32 (r, x, y, 1);
     104  }
     105  
     106  /*
     107  **sfooq_laneq:
     108  **	sudot	v0\.4s, v1\.16b, v2\.4b\[3\]
     109  **	ret
     110  */
     111  int32x4_t sfooq_laneq (int32x4_t r, int8x16_t x, uint8x16_t y)
     112  {
     113    return vsudotq_laneq_s32 (r, x, y, 3);
     114  }
     115  
     116  /*
     117  **ufoo_untied:
     118  **	mov	v0\.8b, v1\.8b
     119  **	usdot	v0\.2s, v2\.8b, v3\.8b
     120  **	ret
     121  */
     122  int32x2_t ufoo_untied (int32x2_t unused, int32x2_t r, uint8x8_t x, int8x8_t y)
     123  {
     124    return vusdot_s32 (r, x, y);
     125  }
     126  
     127  /*
     128  **ufooq_laneq_untied:
     129  **	mov	v0\.16b, v1\.16b
     130  **	usdot	v0\.4s, v2\.16b, v3\.4b\[3\]
     131  **	ret
     132  */
     133  int32x4_t ufooq_laneq_untied (int32x2_t unused, int32x4_t r, uint8x16_t x, int8x16_t y)
     134  {
     135    return vusdotq_laneq_s32 (r, x, y, 3);
     136  }
     137  
     138