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