1 /*===---- arm_neon_sve_bridge.h - ARM NEON SVE Bridge intrinsics -----------=== 2 * 3 * 4 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5 * See https://llvm.org/LICENSE.txt for license information. 6 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7 * 8 *===-----------------------------------------------------------------------=== 9 */ 10 11 #ifndef __ARM_NEON_SVE_BRIDGE_H 12 #define __ARM_NEON_SVE_BRIDGE_H 13 14 #include <arm_neon.h> 15 #include <arm_sve.h> 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /* Function attributes */ 22 #define __ai static __inline__ __attribute__((__always_inline__, __nodebug__)) 23 #define __aio \ 24 static __inline__ \ 25 __attribute__((__always_inline__, __nodebug__, __overloadable__)) 26 27 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s8))) 28 svint8_t svset_neonq(svint8_t, int8x16_t); 29 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s16))) 30 svint16_t svset_neonq(svint16_t, int16x8_t); 31 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s32))) 32 svint32_t svset_neonq(svint32_t, int32x4_t); 33 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s64))) 34 svint64_t svset_neonq(svint64_t, int64x2_t); 35 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u8))) 36 svuint8_t svset_neonq(svuint8_t, uint8x16_t); 37 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u16))) 38 svuint16_t svset_neonq(svuint16_t, uint16x8_t); 39 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u32))) 40 svuint32_t svset_neonq(svuint32_t, uint32x4_t); 41 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u64))) 42 svuint64_t svset_neonq(svuint64_t, uint64x2_t); 43 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f16))) 44 svfloat16_t svset_neonq(svfloat16_t, float16x8_t); 45 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f32))) 46 svfloat32_t svset_neonq(svfloat32_t, float32x4_t); 47 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f64))) 48 svfloat64_t svset_neonq(svfloat64_t, float64x2_t); 49 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s8))) 50 svint8_t svset_neonq_s8(svint8_t, int8x16_t); 51 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s16))) 52 svint16_t svset_neonq_s16(svint16_t, int16x8_t); 53 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s32))) 54 svint32_t svset_neonq_s32(svint32_t, int32x4_t); 55 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s64))) 56 svint64_t svset_neonq_s64(svint64_t, int64x2_t); 57 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u8))) 58 svuint8_t svset_neonq_u8(svuint8_t, uint8x16_t); 59 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u16))) 60 svuint16_t svset_neonq_u16(svuint16_t, uint16x8_t); 61 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u32))) 62 svuint32_t svset_neonq_u32(svuint32_t, uint32x4_t); 63 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u64))) 64 svuint64_t svset_neonq_u64(svuint64_t, uint64x2_t); 65 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f16))) 66 svfloat16_t svset_neonq_f16(svfloat16_t, float16x8_t); 67 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f32))) 68 svfloat32_t svset_neonq_f32(svfloat32_t, float32x4_t); 69 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f64))) 70 svfloat64_t svset_neonq_f64(svfloat64_t, float64x2_t); 71 72 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s8))) 73 int8x16_t svget_neonq(svint8_t); 74 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s16))) 75 int16x8_t svget_neonq(svint16_t); 76 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s32))) 77 int32x4_t svget_neonq(svint32_t); 78 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s64))) 79 int64x2_t svget_neonq(svint64_t); 80 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u8))) 81 uint8x16_t svget_neonq(svuint8_t); 82 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u16))) 83 uint16x8_t svget_neonq(svuint16_t); 84 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u32))) 85 uint32x4_t svget_neonq(svuint32_t); 86 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u64))) 87 uint64x2_t svget_neonq(svuint64_t); 88 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f16))) 89 float16x8_t svget_neonq(svfloat16_t); 90 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f32))) 91 float32x4_t svget_neonq(svfloat32_t); 92 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f64))) 93 float64x2_t svget_neonq(svfloat64_t); 94 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s8))) 95 int8x16_t svget_neonq_s8(svint8_t); 96 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s16))) 97 int16x8_t svget_neonq_s16(svint16_t); 98 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s32))) 99 int32x4_t svget_neonq_s32(svint32_t); 100 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s64))) 101 int64x2_t svget_neonq_s64(svint64_t); 102 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u8))) 103 uint8x16_t svget_neonq_u8(svuint8_t); 104 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u16))) 105 uint16x8_t svget_neonq_u16(svuint16_t); 106 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u32))) 107 uint32x4_t svget_neonq_u32(svuint32_t); 108 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u64))) 109 uint64x2_t svget_neonq_u64(svuint64_t); 110 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f16))) 111 float16x8_t svget_neonq_f16(svfloat16_t); 112 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f32))) 113 float32x4_t svget_neonq_f32(svfloat32_t); 114 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f64))) 115 float64x2_t svget_neonq_f64(svfloat64_t); 116 117 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s8))) 118 svint8_t svdup_neonq(int8x16_t); 119 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s16))) 120 svint16_t svdup_neonq(int16x8_t); 121 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s32))) 122 svint32_t svdup_neonq(int32x4_t); 123 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s64))) 124 svint64_t svdup_neonq(int64x2_t); 125 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u8))) 126 svuint8_t svdup_neonq(uint8x16_t); 127 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u16))) 128 svuint16_t svdup_neonq(uint16x8_t); 129 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u32))) 130 svuint32_t svdup_neonq(uint32x4_t); 131 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u64))) 132 svuint64_t svdup_neonq(uint64x2_t); 133 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f16))) 134 svfloat16_t svdup_neonq(float16x8_t); 135 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f32))) 136 svfloat32_t svdup_neonq(float32x4_t); 137 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f64))) 138 svfloat64_t svdup_neonq(float64x2_t); 139 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s8))) 140 svint8_t svdup_neonq_s8(int8x16_t); 141 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s16))) 142 svint16_t svdup_neonq_s16(int16x8_t); 143 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s32))) 144 svint32_t svdup_neonq_s32(int32x4_t); 145 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s64))) 146 svint64_t svdup_neonq_s64(int64x2_t); 147 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u8))) 148 svuint8_t svdup_neonq_u8(uint8x16_t); 149 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u16))) 150 svuint16_t svdup_neonq_u16(uint16x8_t); 151 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u32))) 152 svuint32_t svdup_neonq_u32(uint32x4_t); 153 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u64))) 154 svuint64_t svdup_neonq_u64(uint64x2_t); 155 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f16))) 156 svfloat16_t svdup_neonq_f16(float16x8_t); 157 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f32))) 158 svfloat32_t svdup_neonq_f32(float32x4_t); 159 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f64))) 160 svfloat64_t svdup_neonq_f64(float64x2_t); 161 162 #if defined(__ARM_FEATURE_SVE_BF16) 163 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_bf16))) 164 svbfloat16_t svset_neonq(svbfloat16_t, bfloat16x8_t); 165 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_bf16))) 166 svbfloat16_t svset_neonq_bf16(svbfloat16_t, bfloat16x8_t); 167 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_bf16))) 168 bfloat16x8_t svget_neonq(svbfloat16_t); 169 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_bf16))) 170 bfloat16x8_t svget_neonq_bf16(svbfloat16_t); 171 __aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_bf16))) 172 svbfloat16_t svdup_neonq(bfloat16x8_t); 173 __ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_bf16))) 174 svbfloat16_t svdup_neonq_bf16(bfloat16x8_t); 175 #endif // defined(__ARM_FEATURE_SVE_BF16) 176 177 #undef __ai 178 #undef __aio 179 180 #ifdef __cplusplus 181 } // extern "C" 182 #endif 183 184 #endif //__ARM_NEON_SVE_BRIDGE_H 185