1 /* { dg-do assemble { target { arm*-*-* } } } */
2 /* { dg-require-effective-target arm_hard_ok } */
3 /* { dg-require-effective-target arm_v8_2a_i8mm_ok } */
4 /* { dg-add-options arm_v8_2a_i8mm } */
5 /* { dg-additional-options "-O -save-temps -mfloat-abi=hard -mfpu=auto" } */
6 /* { dg-final { check-function-bodies "**" "" } } */
10 /* Unsigned-Signed Dot Product instructions. */
15 ** vusdot\.s8 d0, d1, d2
18 int32x2_t
usfoo (int32x2_t r
, uint8x8_t x
, int8x8_t y
)
20 return vusdot_s32 (r
, x
, y
);
26 ** vusdot\.s8 q0, q1, q2
29 int32x4_t
usfooq (int32x4_t r
, uint8x16_t x
, int8x16_t y
)
31 return vusdotq_s32 (r
, x
, y
);
37 ** vusdot\.s8 d0, d1, d2\[0\]
40 int32x2_t
usfoo_lane (int32x2_t r
, uint8x8_t x
, int8x8_t y
)
42 return vusdot_lane_s32 (r
, x
, y
, 0);
48 ** vusdot\.s8 q0, q1, d4\[1\]
51 int32x4_t
usfooq_lane (int32x4_t r
, uint8x16_t x
, int8x8_t y
)
53 return vusdotq_lane_s32 (r
, x
, y
, 1);
56 /* Signed-Unsigned Dot Product instructions. */
61 ** vsudot\.u8 d0, d1, d2\[0\]
64 int32x2_t
sfoo_lane (int32x2_t r
, int8x8_t x
, uint8x8_t y
)
66 return vsudot_lane_s32 (r
, x
, y
, 0);
72 ** vsudot\.u8 q0, q1, d4\[1\]
75 int32x4_t
sfooq_lane (int32x4_t r
, int8x16_t x
, uint8x8_t y
)
77 return vsudotq_lane_s32 (r
, x
, y
, 1);
83 ** vusdot\.s8 d0, d1, d3\[0\]
86 int32x2_t
usfoo_laneq (int32x2_t r
, uint8x8_t x
, int8x16_t y
)
88 return vusdot_laneq_s32 (r
, x
, y
, 2);
94 ** vusdot\.s8 q0, q1, d5\[1\]
97 int32x4_t
usfooq_laneq (int32x4_t r
, uint8x16_t x
, int8x16_t y
)
99 return vusdotq_laneq_s32 (r
, x
, y
, 3);
102 /* Signed-Unsigned Dot Product instructions. */
107 ** vsudot\.u8 d0, d1, d3\[0\]
110 int32x2_t
sfoo_laneq (int32x2_t r
, int8x8_t x
, uint8x16_t y
)
112 return vsudot_laneq_s32 (r
, x
, y
, 2);
118 ** vsudot\.u8 q0, q1, d5\[1\]
121 int32x4_t
sfooq_laneq (int32x4_t r
, int8x16_t x
, uint8x16_t y
)
123 return vsudotq_laneq_s32 (r
, x
, y
, 3);
129 ** vusdot\.s8 d1, d2, d3
130 ** vmov d0, d1 @ v2si
133 int32x2_t
usfoo_untied (int32x2_t unused
, int32x2_t r
, uint8x8_t x
, int8x8_t y
)
135 return vusdot_s32 (r
, x
, y
);
141 ** vusdot.s8 d1, d2, d3\[0\]
142 ** vmov d0, d1 @ v2si
145 int32x2_t
usfoo_lane_untied (int32x2_t unused
, int32x2_t r
, uint8x8_t x
, int8x8_t y
)
147 return vusdot_lane_s32 (r
, x
, y
, 0);