#include <arm_neon.h>
Dot product & matrix multiply
Integer and BFloat16 dot products and matrix multiply-accumulate (dotprod, i8mm, bf16).
functionvbfdotq_f32
__ai __attribute__((target("bf16,neon"))) float32x4_t vbfdotq_f32(float32x4_t __p0, bfloat16x8_t __p1, bfloat16x8_t __p2)
functionvbfdot_f32
__ai __attribute__((target("bf16,neon"))) float32x2_t vbfdot_f32(float32x2_t __p0, bfloat16x4_t __p1, bfloat16x4_t __p2)
functionvbfmmlaq_f32
__ai __attribute__((target("bf16,neon"))) float32x4_t vbfmmlaq_f32(float32x4_t __p0, bfloat16x8_t __p1, bfloat16x8_t __p2)
functionvdotq_u32
__ai __attribute__((target("dotprod,neon"))) uint32x4_t vdotq_u32(uint32x4_t __p0, uint8x16_t __p1, uint8x16_t __p2)
functionvdotq_s32
__ai __attribute__((target("dotprod,neon"))) int32x4_t vdotq_s32(int32x4_t __p0, int8x16_t __p1, int8x16_t __p2)
functionvdot_u32
__ai __attribute__((target("dotprod,neon"))) uint32x2_t vdot_u32(uint32x2_t __p0, uint8x8_t __p1, uint8x8_t __p2)
functionvdot_s32
__ai __attribute__((target("dotprod,neon"))) int32x2_t vdot_s32(int32x2_t __p0, int8x8_t __p1, int8x8_t __p2)
functionvmmlaq_u32
__ai __attribute__((target("i8mm,neon"))) uint32x4_t vmmlaq_u32(uint32x4_t __p0, uint8x16_t __p1, uint8x16_t __p2)
functionvmmlaq_s32
__ai __attribute__((target("i8mm,neon"))) int32x4_t vmmlaq_s32(int32x4_t __p0, int8x16_t __p1, int8x16_t __p2)
functionvusdotq_s32
__ai __attribute__((target("i8mm,neon"))) int32x4_t vusdotq_s32(int32x4_t __p0, uint8x16_t __p1, int8x16_t __p2)
functionvusdot_s32
__ai __attribute__((target("i8mm,neon"))) int32x2_t vusdot_s32(int32x2_t __p0, uint8x8_t __p1, int8x8_t __p2)
functionvusmmlaq_s32
__ai __attribute__((target("i8mm,neon"))) int32x4_t vusmmlaq_s32(int32x4_t __p0, uint8x16_t __p1, int8x16_t __p2)
macrovdotq_laneq_u32
#define vdotq_laneq_u32(__p0_242, __p1_242, __p2_242, __p3_242) __extension__ ({
uint32x4_t __ret_242;
uint32x4_t __s0_242 = __p0_242;
uint8x16_t __s1_242 = __p1_242;
uint8x16_t __s2_242 = __p2_242;
__ret_242 = vdotq_u32(__s0_242, __s1_242, __builtin_bit_cast(uint8x16_t, splatq_laneq_u32(__builtin_bit_cast(uint32x4_t, __s2_242), __p3_242)));
__ret_242;
})macrovdotq_laneq_s32
#define vdotq_laneq_s32(__p0_244, __p1_244, __p2_244, __p3_244) __extension__ ({
int32x4_t __ret_244;
int32x4_t __s0_244 = __p0_244;
int8x16_t __s1_244 = __p1_244;
int8x16_t __s2_244 = __p2_244;
__ret_244 = vdotq_s32(__s0_244, __s1_244, __builtin_bit_cast(int8x16_t, splatq_laneq_s32(__builtin_bit_cast(int32x4_t, __s2_244), __p3_244)));
__ret_244;
})macrovdot_laneq_u32
#define vdot_laneq_u32(__p0_246, __p1_246, __p2_246, __p3_246) __extension__ ({
uint32x2_t __ret_246;
uint32x2_t __s0_246 = __p0_246;
uint8x8_t __s1_246 = __p1_246;
uint8x16_t __s2_246 = __p2_246;
__ret_246 = vdot_u32(__s0_246, __s1_246, __builtin_bit_cast(uint8x8_t, splat_laneq_u32(__builtin_bit_cast(uint32x4_t, __s2_246), __p3_246)));
__ret_246;
})macrovdot_laneq_s32
#define vdot_laneq_s32(__p0_248, __p1_248, __p2_248, __p3_248) __extension__ ({
int32x2_t __ret_248;
int32x2_t __s0_248 = __p0_248;
int8x8_t __s1_248 = __p1_248;
int8x16_t __s2_248 = __p2_248;
__ret_248 = vdot_s32(__s0_248, __s1_248, __builtin_bit_cast(int8x8_t, splat_laneq_s32(__builtin_bit_cast(int32x4_t, __s2_248), __p3_248)));
__ret_248;
})macrovsudotq_laneq_s32
#define vsudotq_laneq_s32(__p0_274, __p1_274, __p2_274, __p3_274) __extension__ ({
int32x4_t __ret_274;
int32x4_t __s0_274 = __p0_274;
int8x16_t __s1_274 = __p1_274;
uint8x16_t __s2_274 = __p2_274;
__ret_274 = vusdotq_s32(__s0_274, __builtin_bit_cast(uint8x16_t, splatq_laneq_s32(__builtin_bit_cast(int32x4_t, __s2_274), __p3_274)), __s1_274);
__ret_274;
})macrovsudot_laneq_s32
#define vsudot_laneq_s32(__p0_276, __p1_276, __p2_276, __p3_276) __extension__ ({
int32x2_t __ret_276;
int32x2_t __s0_276 = __p0_276;
int8x8_t __s1_276 = __p1_276;
uint8x16_t __s2_276 = __p2_276;
__ret_276 = vusdot_s32(__s0_276, __builtin_bit_cast(uint8x8_t, splat_laneq_s32(__builtin_bit_cast(int32x4_t, __s2_276), __p3_276)), __s1_276);
__ret_276;
})macrovusdotq_laneq_s32
#define vusdotq_laneq_s32(__p0_278, __p1_278, __p2_278, __p3_278) __extension__ ({
int32x4_t __ret_278;
int32x4_t __s0_278 = __p0_278;
uint8x16_t __s1_278 = __p1_278;
int8x16_t __s2_278 = __p2_278;
__ret_278 = vusdotq_s32(__s0_278, __s1_278, __builtin_bit_cast(int8x16_t, splatq_laneq_s32(__builtin_bit_cast(int32x4_t, __s2_278), __p3_278)));
__ret_278;
})macrovusdot_laneq_s32
#define vusdot_laneq_s32(__p0_280, __p1_280, __p2_280, __p3_280) __extension__ ({
int32x2_t __ret_280;
int32x2_t __s0_280 = __p0_280;
uint8x8_t __s1_280 = __p1_280;
int8x16_t __s2_280 = __p2_280;
__ret_280 = vusdot_s32(__s0_280, __s1_280, __builtin_bit_cast(int8x8_t, splat_laneq_s32(__builtin_bit_cast(int32x4_t, __s2_280), __p3_280)));
__ret_280;
})macrovbfdotq_lane_f32
#define vbfdotq_lane_f32(__p0_808, __p1_808, __p2_808, __p3_808) __extension__ ({
float32x4_t __ret_808;
float32x4_t __s0_808 = __p0_808;
bfloat16x8_t __s1_808 = __p1_808;
bfloat16x4_t __s2_808 = __p2_808;
__ret_808 = vbfdotq_f32(__s0_808, __s1_808, __builtin_bit_cast(bfloat16x8_t, splatq_lane_f32(__builtin_bit_cast(float32x2_t, __s2_808), __p3_808)));
__ret_808;
})macrovbfdot_lane_f32
#define vbfdot_lane_f32(__p0_810, __p1_810, __p2_810, __p3_810) __extension__ ({
float32x2_t __ret_810;
float32x2_t __s0_810 = __p0_810;
bfloat16x4_t __s1_810 = __p1_810;
bfloat16x4_t __s2_810 = __p2_810;
__ret_810 = vbfdot_f32(__s0_810, __s1_810, __builtin_bit_cast(bfloat16x4_t, splat_lane_f32(__builtin_bit_cast(float32x2_t, __s2_810), __p3_810)));
__ret_810;
})macrovbfdotq_laneq_f32
#define vbfdotq_laneq_f32(__p0_812, __p1_812, __p2_812, __p3_812) __extension__ ({
float32x4_t __ret_812;
float32x4_t __s0_812 = __p0_812;
bfloat16x8_t __s1_812 = __p1_812;
bfloat16x8_t __s2_812 = __p2_812;
__ret_812 = vbfdotq_f32(__s0_812, __s1_812, __builtin_bit_cast(bfloat16x8_t, splatq_laneq_f32(__builtin_bit_cast(float32x4_t, __s2_812), __p3_812)));
__ret_812;
})macrovbfdot_laneq_f32
#define vbfdot_laneq_f32(__p0_814, __p1_814, __p2_814, __p3_814) __extension__ ({
float32x2_t __ret_814;
float32x2_t __s0_814 = __p0_814;
bfloat16x4_t __s1_814 = __p1_814;
bfloat16x8_t __s2_814 = __p2_814;
__ret_814 = vbfdot_f32(__s0_814, __s1_814, __builtin_bit_cast(bfloat16x4_t, splat_laneq_f32(__builtin_bit_cast(float32x4_t, __s2_814), __p3_814)));
__ret_814;
})macrovdotq_lane_u32
#define vdotq_lane_u32(__p0_827, __p1_827, __p2_827, __p3_827) __extension__ ({
uint32x4_t __ret_827;
uint32x4_t __s0_827 = __p0_827;
uint8x16_t __s1_827 = __p1_827;
uint8x8_t __s2_827 = __p2_827;
__ret_827 = vdotq_u32(__s0_827, __s1_827, __builtin_bit_cast(uint8x16_t, splatq_lane_u32(__builtin_bit_cast(uint32x2_t, __s2_827), __p3_827)));
__ret_827;
})macrovdotq_lane_s32
#define vdotq_lane_s32(__p0_829, __p1_829, __p2_829, __p3_829) __extension__ ({
int32x4_t __ret_829;
int32x4_t __s0_829 = __p0_829;
int8x16_t __s1_829 = __p1_829;
int8x8_t __s2_829 = __p2_829;
__ret_829 = vdotq_s32(__s0_829, __s1_829, __builtin_bit_cast(int8x16_t, splatq_lane_s32(__builtin_bit_cast(int32x2_t, __s2_829), __p3_829)));
__ret_829;
})macrovdot_lane_u32
#define vdot_lane_u32(__p0_831, __p1_831, __p2_831, __p3_831) __extension__ ({
uint32x2_t __ret_831;
uint32x2_t __s0_831 = __p0_831;
uint8x8_t __s1_831 = __p1_831;
uint8x8_t __s2_831 = __p2_831;
__ret_831 = vdot_u32(__s0_831, __s1_831, __builtin_bit_cast(uint8x8_t, splat_lane_u32(__builtin_bit_cast(uint32x2_t, __s2_831), __p3_831)));
__ret_831;
})macrovdot_lane_s32
#define vdot_lane_s32(__p0_833, __p1_833, __p2_833, __p3_833) __extension__ ({
int32x2_t __ret_833;
int32x2_t __s0_833 = __p0_833;
int8x8_t __s1_833 = __p1_833;
int8x8_t __s2_833 = __p2_833;
__ret_833 = vdot_s32(__s0_833, __s1_833, __builtin_bit_cast(int8x8_t, splat_lane_s32(__builtin_bit_cast(int32x2_t, __s2_833), __p3_833)));
__ret_833;
})macrovsudotq_lane_s32
#define vsudotq_lane_s32(__p0_839, __p1_839, __p2_839, __p3_839) __extension__ ({
int32x4_t __ret_839;
int32x4_t __s0_839 = __p0_839;
int8x16_t __s1_839 = __p1_839;
uint8x8_t __s2_839 = __p2_839;
__ret_839 = vusdotq_s32(__s0_839, __builtin_bit_cast(uint8x16_t, splatq_lane_s32(__builtin_bit_cast(int32x2_t, __s2_839), __p3_839)), __s1_839);
__ret_839;
})macrovsudot_lane_s32
#define vsudot_lane_s32(__p0_841, __p1_841, __p2_841, __p3_841) __extension__ ({
int32x2_t __ret_841;
int32x2_t __s0_841 = __p0_841;
int8x8_t __s1_841 = __p1_841;
uint8x8_t __s2_841 = __p2_841;
__ret_841 = vusdot_s32(__s0_841, __builtin_bit_cast(uint8x8_t, splat_lane_s32(__builtin_bit_cast(int32x2_t, __s2_841), __p3_841)), __s1_841);
__ret_841;
})macrovusdotq_lane_s32
#define vusdotq_lane_s32(__p0_843, __p1_843, __p2_843, __p3_843) __extension__ ({
int32x4_t __ret_843;
int32x4_t __s0_843 = __p0_843;
uint8x16_t __s1_843 = __p1_843;
int8x8_t __s2_843 = __p2_843;
__ret_843 = vusdotq_s32(__s0_843, __s1_843, __builtin_bit_cast(int8x16_t, splatq_lane_s32(__builtin_bit_cast(int32x2_t, __s2_843), __p3_843)));
__ret_843;
})macrovusdot_lane_s32
#define vusdot_lane_s32(__p0_845, __p1_845, __p2_845, __p3_845) __extension__ ({
int32x2_t __ret_845;
int32x2_t __s0_845 = __p0_845;
uint8x8_t __s1_845 = __p1_845;
int8x8_t __s2_845 = __p2_845;
__ret_845 = vusdot_s32(__s0_845, __s1_845, __builtin_bit_cast(int8x8_t, splat_lane_s32(__builtin_bit_cast(int32x2_t, __s2_845), __p3_845)));
__ret_845;
})