[ARM] Add V8HFmode and float16x8_t type
* config/arm/arm.h (VALID_NEON_QREG_MODE): Add V8HFmode. * config/arm/arm.c (arm_vector_mode_supported_p): Support V8HFmode. * config/arm/arm-builtins.c (v8hf_UP): New. (arm_init_simd_builtin_types): Initialise Float16x8_t. * config/arm/arm-simd-builtin-types.def (Float16x8_t): New. * config/arm/arm_neon.h (float16x8_t): New typedef. From-SVN: r227536
This commit is contained in:
parent
61e33bff7b
commit
cd1c19a5c0
|
@ -1,3 +1,15 @@
|
||||||
|
2015-09-07 Alan Lawrence <alan.lawrence.com>
|
||||||
|
|
||||||
|
* config/arm/arm.h (VALID_NEON_QREG_MODE): Add V8HFmode.
|
||||||
|
|
||||||
|
* config/arm/arm.c (arm_vector_mode_supported_p): Support V8HFmode.
|
||||||
|
|
||||||
|
* config/arm/arm-builtins.c (v8hf_UP): New.
|
||||||
|
(arm_init_simd_builtin_types): Initialise Float16x8_t.
|
||||||
|
|
||||||
|
* config/arm/arm-simd-builtin-types.def (Float16x8_t): New.
|
||||||
|
|
||||||
|
* config/arm/arm_neon.h (float16x8_t): New typedef.
|
||||||
2015-09-07 Alan Lawrence <alan.lawrence@arm.com>
|
2015-09-07 Alan Lawrence <alan.lawrence@arm.com>
|
||||||
|
|
||||||
* config/arm/arm_neon.h (float16_t, vget_lane_f16, vset_lane_f16,
|
* config/arm/arm_neon.h (float16_t, vget_lane_f16, vset_lane_f16,
|
||||||
|
|
|
@ -190,6 +190,7 @@ arm_storestruct_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
#define di_UP DImode
|
#define di_UP DImode
|
||||||
#define v16qi_UP V16QImode
|
#define v16qi_UP V16QImode
|
||||||
#define v8hi_UP V8HImode
|
#define v8hi_UP V8HImode
|
||||||
|
#define v8hf_UP V8HFmode
|
||||||
#define v4si_UP V4SImode
|
#define v4si_UP V4SImode
|
||||||
#define v4sf_UP V4SFmode
|
#define v4sf_UP V4SFmode
|
||||||
#define v2di_UP V2DImode
|
#define v2di_UP V2DImode
|
||||||
|
@ -819,6 +820,7 @@ arm_init_simd_builtin_types (void)
|
||||||
/* The __builtin_simd{64,128}_float16 types are kept private unless
|
/* The __builtin_simd{64,128}_float16 types are kept private unless
|
||||||
we have a scalar __fp16 type. */
|
we have a scalar __fp16 type. */
|
||||||
arm_simd_types[Float16x4_t].eltype = arm_simd_floatHF_type_node;
|
arm_simd_types[Float16x4_t].eltype = arm_simd_floatHF_type_node;
|
||||||
|
arm_simd_types[Float16x8_t].eltype = arm_simd_floatHF_type_node;
|
||||||
arm_simd_types[Float32x2_t].eltype = float_type_node;
|
arm_simd_types[Float32x2_t].eltype = float_type_node;
|
||||||
arm_simd_types[Float32x4_t].eltype = float_type_node;
|
arm_simd_types[Float32x4_t].eltype = float_type_node;
|
||||||
|
|
||||||
|
|
|
@ -44,5 +44,7 @@
|
||||||
|
|
||||||
ENTRY (Float16x4_t, V4HF, none, 64, float16, 18)
|
ENTRY (Float16x4_t, V4HF, none, 64, float16, 18)
|
||||||
ENTRY (Float32x2_t, V2SF, none, 64, float32, 18)
|
ENTRY (Float32x2_t, V2SF, none, 64, float32, 18)
|
||||||
|
|
||||||
|
ENTRY (Float16x8_t, V8HF, none, 128, float16, 19)
|
||||||
ENTRY (Float32x4_t, V4SF, none, 128, float32, 19)
|
ENTRY (Float32x4_t, V4SF, none, 128, float32, 19)
|
||||||
|
|
||||||
|
|
|
@ -26278,7 +26278,8 @@ arm_vector_mode_supported_p (machine_mode mode)
|
||||||
{
|
{
|
||||||
/* Neon also supports V2SImode, etc. listed in the clause below. */
|
/* Neon also supports V2SImode, etc. listed in the clause below. */
|
||||||
if (TARGET_NEON && (mode == V2SFmode || mode == V4SImode || mode == V8HImode
|
if (TARGET_NEON && (mode == V2SFmode || mode == V4SImode || mode == V8HImode
|
||||||
|| mode == V4HFmode || mode == V16QImode || mode == V4SFmode || mode == V2DImode))
|
|| mode == V4HFmode || mode == V16QImode || mode == V4SFmode
|
||||||
|
|| mode == V2DImode || mode == V8HFmode))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if ((TARGET_NEON || TARGET_IWMMXT)
|
if ((TARGET_NEON || TARGET_IWMMXT)
|
||||||
|
|
|
@ -1016,7 +1016,7 @@ extern int arm_arch_crc;
|
||||||
/* Modes valid for Neon Q registers. */
|
/* Modes valid for Neon Q registers. */
|
||||||
#define VALID_NEON_QREG_MODE(MODE) \
|
#define VALID_NEON_QREG_MODE(MODE) \
|
||||||
((MODE) == V4SImode || (MODE) == V8HImode || (MODE) == V16QImode \
|
((MODE) == V4SImode || (MODE) == V8HImode || (MODE) == V16QImode \
|
||||||
|| (MODE) == V4SFmode || (MODE) == V2DImode)
|
|| (MODE) == V8HFmode || (MODE) == V4SFmode || (MODE) == V2DImode)
|
||||||
|
|
||||||
/* Structure modes valid for Neon registers. */
|
/* Structure modes valid for Neon registers. */
|
||||||
#define VALID_NEON_STRUCT_MODE(MODE) \
|
#define VALID_NEON_STRUCT_MODE(MODE) \
|
||||||
|
|
|
@ -60,6 +60,9 @@ typedef __simd128_int8_t int8x16_t;
|
||||||
typedef __simd128_int16_t int16x8_t;
|
typedef __simd128_int16_t int16x8_t;
|
||||||
typedef __simd128_int32_t int32x4_t;
|
typedef __simd128_int32_t int32x4_t;
|
||||||
typedef __simd128_int64_t int64x2_t;
|
typedef __simd128_int64_t int64x2_t;
|
||||||
|
#if defined (__ARM_FP16_FORMAT_IEEE) || defined (__ARM_FP16_FORMAT_ALTERNATIVE)
|
||||||
|
typedef __simd128_float16_t float16x8_t;
|
||||||
|
#endif
|
||||||
typedef __simd128_float32_t float32x4_t;
|
typedef __simd128_float32_t float32x4_t;
|
||||||
typedef __simd128_poly8_t poly8x16_t;
|
typedef __simd128_poly8_t poly8x16_t;
|
||||||
typedef __simd128_poly16_t poly16x8_t;
|
typedef __simd128_poly16_t poly16x8_t;
|
||||||
|
|
Loading…
Reference in New Issue