master
  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
 18extern "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)))
 28svint8_t svset_neonq(svint8_t, int8x16_t);
 29__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s16)))
 30svint16_t svset_neonq(svint16_t, int16x8_t);
 31__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s32)))
 32svint32_t svset_neonq(svint32_t, int32x4_t);
 33__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s64)))
 34svint64_t svset_neonq(svint64_t, int64x2_t);
 35__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u8)))
 36svuint8_t svset_neonq(svuint8_t, uint8x16_t);
 37__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u16)))
 38svuint16_t svset_neonq(svuint16_t, uint16x8_t);
 39__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u32)))
 40svuint32_t svset_neonq(svuint32_t, uint32x4_t);
 41__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u64)))
 42svuint64_t svset_neonq(svuint64_t, uint64x2_t);
 43__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f16)))
 44svfloat16_t svset_neonq(svfloat16_t, float16x8_t);
 45__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f32)))
 46svfloat32_t svset_neonq(svfloat32_t, float32x4_t);
 47__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f64)))
 48svfloat64_t svset_neonq(svfloat64_t, float64x2_t);
 49__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s8)))
 50svint8_t svset_neonq_s8(svint8_t, int8x16_t);
 51__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s16)))
 52svint16_t svset_neonq_s16(svint16_t, int16x8_t);
 53__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s32)))
 54svint32_t svset_neonq_s32(svint32_t, int32x4_t);
 55__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_s64)))
 56svint64_t svset_neonq_s64(svint64_t, int64x2_t);
 57__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u8)))
 58svuint8_t svset_neonq_u8(svuint8_t, uint8x16_t);
 59__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u16)))
 60svuint16_t svset_neonq_u16(svuint16_t, uint16x8_t);
 61__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u32)))
 62svuint32_t svset_neonq_u32(svuint32_t, uint32x4_t);
 63__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_u64)))
 64svuint64_t svset_neonq_u64(svuint64_t, uint64x2_t);
 65__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f16)))
 66svfloat16_t svset_neonq_f16(svfloat16_t, float16x8_t);
 67__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f32)))
 68svfloat32_t svset_neonq_f32(svfloat32_t, float32x4_t);
 69__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_f64)))
 70svfloat64_t svset_neonq_f64(svfloat64_t, float64x2_t);
 71
 72__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s8)))
 73int8x16_t svget_neonq(svint8_t);
 74__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s16)))
 75int16x8_t svget_neonq(svint16_t);
 76__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s32)))
 77int32x4_t svget_neonq(svint32_t);
 78__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s64)))
 79int64x2_t svget_neonq(svint64_t);
 80__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u8)))
 81uint8x16_t svget_neonq(svuint8_t);
 82__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u16)))
 83uint16x8_t svget_neonq(svuint16_t);
 84__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u32)))
 85uint32x4_t svget_neonq(svuint32_t);
 86__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u64)))
 87uint64x2_t svget_neonq(svuint64_t);
 88__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f16)))
 89float16x8_t svget_neonq(svfloat16_t);
 90__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f32)))
 91float32x4_t svget_neonq(svfloat32_t);
 92__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f64)))
 93float64x2_t svget_neonq(svfloat64_t);
 94__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s8)))
 95int8x16_t svget_neonq_s8(svint8_t);
 96__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s16)))
 97int16x8_t svget_neonq_s16(svint16_t);
 98__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s32)))
 99int32x4_t svget_neonq_s32(svint32_t);
100__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_s64)))
101int64x2_t svget_neonq_s64(svint64_t);
102__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u8)))
103uint8x16_t svget_neonq_u8(svuint8_t);
104__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u16)))
105uint16x8_t svget_neonq_u16(svuint16_t);
106__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u32)))
107uint32x4_t svget_neonq_u32(svuint32_t);
108__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_u64)))
109uint64x2_t svget_neonq_u64(svuint64_t);
110__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f16)))
111float16x8_t svget_neonq_f16(svfloat16_t);
112__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f32)))
113float32x4_t svget_neonq_f32(svfloat32_t);
114__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_f64)))
115float64x2_t svget_neonq_f64(svfloat64_t);
116
117__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s8)))
118svint8_t svdup_neonq(int8x16_t);
119__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s16)))
120svint16_t svdup_neonq(int16x8_t);
121__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s32)))
122svint32_t svdup_neonq(int32x4_t);
123__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s64)))
124svint64_t svdup_neonq(int64x2_t);
125__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u8)))
126svuint8_t svdup_neonq(uint8x16_t);
127__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u16)))
128svuint16_t svdup_neonq(uint16x8_t);
129__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u32)))
130svuint32_t svdup_neonq(uint32x4_t);
131__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u64)))
132svuint64_t svdup_neonq(uint64x2_t);
133__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f16)))
134svfloat16_t svdup_neonq(float16x8_t);
135__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f32)))
136svfloat32_t svdup_neonq(float32x4_t);
137__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f64)))
138svfloat64_t svdup_neonq(float64x2_t);
139__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s8)))
140svint8_t svdup_neonq_s8(int8x16_t);
141__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s16)))
142svint16_t svdup_neonq_s16(int16x8_t);
143__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s32)))
144svint32_t svdup_neonq_s32(int32x4_t);
145__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_s64)))
146svint64_t svdup_neonq_s64(int64x2_t);
147__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u8)))
148svuint8_t svdup_neonq_u8(uint8x16_t);
149__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u16)))
150svuint16_t svdup_neonq_u16(uint16x8_t);
151__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u32)))
152svuint32_t svdup_neonq_u32(uint32x4_t);
153__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_u64)))
154svuint64_t svdup_neonq_u64(uint64x2_t);
155__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f16)))
156svfloat16_t svdup_neonq_f16(float16x8_t);
157__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f32)))
158svfloat32_t svdup_neonq_f32(float32x4_t);
159__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_f64)))
160svfloat64_t svdup_neonq_f64(float64x2_t);
161
162__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_bf16)))
163svbfloat16_t svset_neonq(svbfloat16_t, bfloat16x8_t);
164__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svset_neonq_bf16)))
165svbfloat16_t svset_neonq_bf16(svbfloat16_t, bfloat16x8_t);
166__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_bf16)))
167bfloat16x8_t svget_neonq(svbfloat16_t);
168__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svget_neonq_bf16)))
169bfloat16x8_t svget_neonq_bf16(svbfloat16_t);
170__aio __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_bf16)))
171svbfloat16_t svdup_neonq(bfloat16x8_t);
172__ai __attribute__((__clang_arm_builtin_alias(__builtin_sve_svdup_neonq_bf16)))
173svbfloat16_t svdup_neonq_bf16(bfloat16x8_t);
174
175#undef __ai
176#undef __aio
177
178#ifdef __cplusplus
179} // extern "C"
180#endif
181
182#endif //__ARM_NEON_SVE_BRIDGE_H