Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/arm/arm_neon.h @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
comparison
equal
deleted
inserted
replaced
111:04ced10e8804 | 131:84e7813d76e9 |
---|---|
1 /* ARM NEON intrinsics include file. | 1 /* ARM NEON intrinsics include file. |
2 | 2 |
3 Copyright (C) 2006-2017 Free Software Foundation, Inc. | 3 Copyright (C) 2006-2018 Free Software Foundation, Inc. |
4 Contributed by CodeSourcery. | 4 Contributed by CodeSourcery. |
5 | 5 |
6 This file is part of GCC. | 6 This file is part of GCC. |
7 | 7 |
8 GCC is free software; you can redistribute it and/or modify it | 8 GCC is free software; you can redistribute it and/or modify it |
18032 return __rv; | 18032 return __rv; |
18033 } | 18033 } |
18034 | 18034 |
18035 #endif | 18035 #endif |
18036 | 18036 |
18037 /* AdvSIMD Dot Product intrinsics. */ | |
18038 | |
18039 #if __ARM_ARCH >= 8 | |
18040 #pragma GCC push_options | |
18041 #pragma GCC target ("arch=armv8.2-a+dotprod") | |
18042 | |
18043 __extension__ extern __inline uint32x2_t | |
18044 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18045 vdot_u32 (uint32x2_t __r, uint8x8_t __a, uint8x8_t __b) | |
18046 { | |
18047 return __builtin_neon_udotv8qi_uuuu (__r, __a, __b); | |
18048 } | |
18049 | |
18050 __extension__ extern __inline uint32x4_t | |
18051 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18052 vdotq_u32 (uint32x4_t __r, uint8x16_t __a, uint8x16_t __b) | |
18053 { | |
18054 return __builtin_neon_udotv16qi_uuuu (__r, __a, __b); | |
18055 } | |
18056 | |
18057 __extension__ extern __inline int32x2_t | |
18058 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18059 vdot_s32 (int32x2_t __r, int8x8_t __a, int8x8_t __b) | |
18060 { | |
18061 return __builtin_neon_sdotv8qi (__r, __a, __b); | |
18062 } | |
18063 | |
18064 __extension__ extern __inline int32x4_t | |
18065 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18066 vdotq_s32 (int32x4_t __r, int8x16_t __a, int8x16_t __b) | |
18067 { | |
18068 return __builtin_neon_sdotv16qi (__r, __a, __b); | |
18069 } | |
18070 | |
18071 __extension__ extern __inline uint32x2_t | |
18072 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18073 vdot_lane_u32 (uint32x2_t __r, uint8x8_t __a, uint8x8_t __b, const int __index) | |
18074 { | |
18075 return __builtin_neon_udot_lanev8qi_uuuus (__r, __a, __b, __index); | |
18076 } | |
18077 | |
18078 __extension__ extern __inline uint32x4_t | |
18079 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18080 vdotq_lane_u32 (uint32x4_t __r, uint8x16_t __a, uint8x8_t __b, | |
18081 const int __index) | |
18082 { | |
18083 return __builtin_neon_udot_lanev16qi_uuuus (__r, __a, __b, __index); | |
18084 } | |
18085 | |
18086 __extension__ extern __inline int32x2_t | |
18087 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18088 vdot_lane_s32 (int32x2_t __r, int8x8_t __a, int8x8_t __b, const int __index) | |
18089 { | |
18090 return __builtin_neon_sdot_lanev8qi (__r, __a, __b, __index); | |
18091 } | |
18092 | |
18093 __extension__ extern __inline int32x4_t | |
18094 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18095 vdotq_lane_s32 (int32x4_t __r, int8x16_t __a, int8x8_t __b, const int __index) | |
18096 { | |
18097 return __builtin_neon_sdot_lanev16qi (__r, __a, __b, __index); | |
18098 } | |
18099 | |
18100 #pragma GCC pop_options | |
18101 #endif | |
18102 | |
18103 #if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE) | |
18104 #pragma GCC push_options | |
18105 #pragma GCC target ("arch=armv8.2-a+fp16fml") | |
18106 | |
18107 __extension__ extern __inline float32x2_t | |
18108 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18109 vfmlal_low_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b) | |
18110 { | |
18111 return __builtin_neon_vfmal_lowv2sf (__r, __a, __b); | |
18112 } | |
18113 | |
18114 __extension__ extern __inline float32x2_t | |
18115 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18116 vfmlsl_low_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b) | |
18117 { | |
18118 return __builtin_neon_vfmsl_lowv2sf (__r, __a, __b); | |
18119 } | |
18120 | |
18121 __extension__ extern __inline float32x2_t | |
18122 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18123 vfmlal_high_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b) | |
18124 { | |
18125 return __builtin_neon_vfmal_highv2sf (__r, __a, __b); | |
18126 } | |
18127 | |
18128 __extension__ extern __inline float32x2_t | |
18129 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18130 vfmlsl_high_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b) | |
18131 { | |
18132 return __builtin_neon_vfmsl_highv2sf (__r, __a, __b); | |
18133 } | |
18134 | |
18135 __extension__ extern __inline float32x4_t | |
18136 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18137 vfmlalq_low_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b) | |
18138 { | |
18139 return __builtin_neon_vfmal_lowv4sf (__r, __a, __b); | |
18140 } | |
18141 | |
18142 __extension__ extern __inline float32x4_t | |
18143 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18144 vfmlslq_low_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b) | |
18145 { | |
18146 return __builtin_neon_vfmsl_lowv4sf (__r, __a, __b); | |
18147 } | |
18148 | |
18149 __extension__ extern __inline float32x4_t | |
18150 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18151 vfmlalq_high_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b) | |
18152 { | |
18153 return __builtin_neon_vfmal_highv4sf (__r, __a, __b); | |
18154 } | |
18155 | |
18156 __extension__ extern __inline float32x4_t | |
18157 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18158 vfmlslq_high_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b) | |
18159 { | |
18160 return __builtin_neon_vfmsl_highv4sf (__r, __a, __b); | |
18161 } | |
18162 | |
18163 __extension__ extern __inline float32x2_t | |
18164 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18165 vfmlal_lane_low_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b, | |
18166 const int __index) | |
18167 { | |
18168 __builtin_arm_lane_check (4, __index); | |
18169 return __builtin_neon_vfmal_lane_lowv2sf (__r, __a, __b, __index); | |
18170 } | |
18171 | |
18172 __extension__ extern __inline float32x2_t | |
18173 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18174 vfmlal_lane_high_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b, | |
18175 const int __index) | |
18176 { | |
18177 __builtin_arm_lane_check (4, __index); | |
18178 return __builtin_neon_vfmal_lane_highv2sf (__r, __a, __b, __index); | |
18179 } | |
18180 | |
18181 __extension__ extern __inline float32x4_t | |
18182 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18183 vfmlalq_laneq_low_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b, | |
18184 const int __index) | |
18185 { | |
18186 __builtin_arm_lane_check (8, __index); | |
18187 return __builtin_neon_vfmal_lane_lowv4sf (__r, __a, __b, __index); | |
18188 } | |
18189 | |
18190 __extension__ extern __inline float32x4_t | |
18191 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18192 vfmlalq_lane_low_u32 (float32x4_t __r, float16x8_t __a, float16x4_t __b, | |
18193 const int __index) | |
18194 { | |
18195 __builtin_arm_lane_check (4, __index); | |
18196 return __builtin_neon_vfmal_lane_lowv4hfv4sf (__r, __a, __b, __index); | |
18197 } | |
18198 | |
18199 __extension__ extern __inline float32x2_t | |
18200 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18201 vfmlal_laneq_low_u32 (float32x2_t __r, float16x4_t __a, float16x8_t __b, | |
18202 const int __index) | |
18203 { | |
18204 __builtin_arm_lane_check (8, __index); | |
18205 return __builtin_neon_vfmal_lane_lowv8hfv2sf (__r, __a, __b, __index); | |
18206 } | |
18207 | |
18208 __extension__ extern __inline float32x4_t | |
18209 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18210 vfmlalq_laneq_high_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b, | |
18211 const int __index) | |
18212 { | |
18213 __builtin_arm_lane_check (8, __index); | |
18214 return __builtin_neon_vfmal_lane_highv4sf (__r, __a, __b, __index); | |
18215 } | |
18216 | |
18217 __extension__ extern __inline float32x4_t | |
18218 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18219 vfmlalq_lane_high_u32 (float32x4_t __r, float16x8_t __a, float16x4_t __b, | |
18220 const int __index) | |
18221 { | |
18222 __builtin_arm_lane_check (4, __index); | |
18223 return __builtin_neon_vfmal_lane_highv4hfv4sf (__r, __a, __b, __index); | |
18224 } | |
18225 | |
18226 __extension__ extern __inline float32x2_t | |
18227 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18228 vfmlal_laneq_high_u32 (float32x2_t __r, float16x4_t __a, float16x8_t __b, | |
18229 const int __index) | |
18230 { | |
18231 __builtin_arm_lane_check (8, __index); | |
18232 return __builtin_neon_vfmal_lane_highv8hfv2sf (__r, __a, __b, __index); | |
18233 } | |
18234 | |
18235 __extension__ extern __inline float32x2_t | |
18236 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18237 vfmlsl_lane_low_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b, | |
18238 const int __index) | |
18239 { | |
18240 __builtin_arm_lane_check (4, __index); | |
18241 return __builtin_neon_vfmsl_lane_lowv2sf (__r, __a, __b, __index); | |
18242 } | |
18243 | |
18244 __extension__ extern __inline float32x2_t | |
18245 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18246 vfmlsl_lane_high_u32 (float32x2_t __r, float16x4_t __a, float16x4_t __b, | |
18247 const int __index) | |
18248 { | |
18249 __builtin_arm_lane_check (4, __index); | |
18250 return __builtin_neon_vfmsl_lane_highv2sf (__r, __a, __b, __index); | |
18251 } | |
18252 | |
18253 __extension__ extern __inline float32x4_t | |
18254 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18255 vfmlslq_laneq_low_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b, | |
18256 const int __index) | |
18257 { | |
18258 __builtin_arm_lane_check (8, __index); | |
18259 return __builtin_neon_vfmsl_lane_lowv4sf (__r, __a, __b, __index); | |
18260 } | |
18261 | |
18262 __extension__ extern __inline float32x4_t | |
18263 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18264 vfmlslq_lane_low_u32 (float32x4_t __r, float16x8_t __a, float16x4_t __b, | |
18265 const int __index) | |
18266 { | |
18267 __builtin_arm_lane_check (4, __index); | |
18268 return __builtin_neon_vfmsl_lane_lowv4hfv4sf (__r, __a, __b, __index); | |
18269 } | |
18270 | |
18271 __extension__ extern __inline float32x2_t | |
18272 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18273 vfmlsl_laneq_low_u32 (float32x2_t __r, float16x4_t __a, float16x8_t __b, | |
18274 const int __index) | |
18275 { | |
18276 __builtin_arm_lane_check (8, __index); | |
18277 return __builtin_neon_vfmsl_lane_lowv8hfv2sf (__r, __a, __b, __index); | |
18278 } | |
18279 | |
18280 __extension__ extern __inline float32x4_t | |
18281 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18282 vfmlslq_laneq_high_u32 (float32x4_t __r, float16x8_t __a, float16x8_t __b, | |
18283 const int __index) | |
18284 { | |
18285 __builtin_arm_lane_check (8, __index); | |
18286 return __builtin_neon_vfmsl_lane_highv4sf (__r, __a, __b, __index); | |
18287 } | |
18288 | |
18289 __extension__ extern __inline float32x4_t | |
18290 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18291 vfmlslq_lane_high_u32 (float32x4_t __r, float16x8_t __a, float16x4_t __b, | |
18292 const int __index) | |
18293 { | |
18294 __builtin_arm_lane_check (4, __index); | |
18295 return __builtin_neon_vfmsl_lane_highv4hfv4sf (__r, __a, __b, __index); | |
18296 } | |
18297 | |
18298 __extension__ extern __inline float32x2_t | |
18299 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) | |
18300 vfmlsl_laneq_high_u32 (float32x2_t __r, float16x4_t __a, float16x8_t __b, | |
18301 const int __index) | |
18302 { | |
18303 __builtin_arm_lane_check (8, __index); | |
18304 return __builtin_neon_vfmsl_lane_highv8hfv2sf (__r, __a, __b, __index); | |
18305 } | |
18306 | |
18307 #pragma GCC pop_options | |
18308 #endif | |
18309 | |
18037 #ifdef __cplusplus | 18310 #ifdef __cplusplus |
18038 } | 18311 } |
18039 #endif | 18312 #endif |
18040 | 18313 |
18041 #pragma GCC pop_options | 18314 #pragma GCC pop_options |