24 #ifndef ACL_SRC_CORE_NEON_WRAPPER_INTRINSICS_MAX_H
25 #define ACL_SRC_CORE_NEON_WRAPPER_INTRINSICS_MAX_H
33 #define VMAX_IMPL(stype, vtype, prefix, postfix) \
34 inline vtype vmax(const vtype &a, const vtype &b) \
36 return prefix##_##postfix(a, b); \
46 #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
48 #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
57 #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
58 VMAX_IMPL(float16_t, float16x8_t, vmaxq, f16)
59 #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
63 #if defined(__aarch64__)
65 #define VMAXV_IMPL(stype, vtype, prefix, postfix) \
66 inline stype vmaxv(const vtype &a) \
68 return prefix##_##postfix(a); \
71 VMAXV_IMPL(uint8_t, uint8x8_t, vmaxv, u8)
72 VMAXV_IMPL(int8_t, int8x8_t, vmaxv, s8)
73 VMAXV_IMPL(uint16_t, uint16x4_t, vmaxv, u16)
74 VMAXV_IMPL(int16_t, int16x4_t, vmaxv, s16)
75 VMAXV_IMPL(uint32_t, uint32x2_t, vmaxv, u32)
76 VMAXV_IMPL(int32_t, int32x2_t, vmaxv, s32)
77 VMAXV_IMPL(
float, float32x2_t, vmaxv, f32)
78 #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
79 VMAXV_IMPL(float16_t, float16x4_t, vmaxv, f16)
80 #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
82 VMAXV_IMPL(uint8_t, uint8x16_t, vmaxvq, u8)
83 VMAXV_IMPL(int8_t, int8x16_t, vmaxvq, s8)
84 VMAXV_IMPL(uint16_t, uint16x8_t, vmaxvq, u16)
85 VMAXV_IMPL(int16_t, int16x8_t, vmaxvq, s16)
86 VMAXV_IMPL(uint32_t, uint32x4_t, vmaxvq, u32)
87 VMAXV_IMPL(int32_t, int32x4_t, vmaxvq, s32)
88 VMAXV_IMPL(
float, float32x4_t, vmaxvq, f32)
89 #ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
90 VMAXV_IMPL(float16_t, float16x8_t, vmaxvq, f16)
91 #endif // __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
94 #endif // defined(__aarch64__)
97 #endif // ACL_SRC_CORE_NEON_WRAPPER_INTRINSICS_MAX_H