Re: [AArch64] 64-bit float vreinterpret implemention
On 28 February 2014 10:30, Alex Velenko wrote: > Hi Richard, > Thank you for your suggestion. Attached is a patch that includes > implementation of your proposition. A testsuite was run on LE and BE > compilers with no regressions. > > Here is the description of the patch: > > This patch introduces vreinterpret implementation for vectors with 64-bit > float lanes and adds testcase for those intrinsics. The aarch64_init_simd_builtins() infrastructure requires the presence of named RTL patterns in order to construct the types of the SIMD intrinsics even when an intrinsic is emitted as tree. This seems rather ugly to me. At some point we should figure out how to clean up this aspect of aarch64_init_simd_builtins() and remove the otherwise unused .md patterns. This aside I think your patch is fine as it stands and can be committed in stage-1. Cheers /Marcus
Re: [AArch64] 64-bit float vreinterpret implemention
On 25/02/14 18:15, Richard Henderson wrote: On 02/25/2014 09:02 AM, Alex Velenko wrote: +(define_expand "aarch64_reinterpretdf" + [(match_operand:DF 0 "register_operand" "") + (match_operand:VD_RE 1 "register_operand" "")] + "TARGET_SIMD" +{ + aarch64_simd_reinterpret (operands[0], operands[1]); + DONE; +}) I believe you want to implement these in aarch64_fold_builtin to fold to a VIEW_CONVERT_EXPR. No sense in leaving these opaque until rtl expansion. r~ Hi Richard, Thank you for your suggestion. Attached is a patch that includes implementation of your proposition. A testsuite was run on LE and BE compilers with no regressions. Here is the description of the patch: This patch introduces vreinterpret implementation for vectors with 64-bit float lanes and adds testcase for those intrinsics. Thanks, Alex gcc/ 2014-02-28 Alex Velenko * config/aarch64/aarch64-builtins.c (TYPES_REINTERP): Removed. (aarch64_types_signed_unsigned_qualifiers): Qualifier added. (aarch64_types_signed_poly_qualifiers): Likewise. (aarch64_types_unsigned_signed_qualifiers): Likewise. (aarch64_types_poly_signed_qualifiers): Likewise. (TYPES_REINTERP_SS): Type macro added. (TYPES_REINTERP_SU): Likewise. (TYPES_REINTERP_SP): Likewise. (TYPES_REINTERP_US): Likewise. (TYPES_REINTERP_PS): Likewise. (aarch64_fold_builtin): New expression folding added. * config/aarch64/aarch64-simd-builtins.def (REINTERP): Declarations removed. (REINTERP_SS): Declarations added. (REINTERP_US): Likewise. (REINTERP_PS): Likewise. (REINTERP_SU): Likewise. (REINTERP_SP): Likewise. * config/aarch64/arm_neon.h (vreinterpret_p8_f64): Implemented. (vreinterpretq_p8_f64): Likewise. (vreinterpret_p16_f64): Likewise. (vreinterpretq_p16_f64): Likewise. (vreinterpret_f32_f64): Likewise. (vreinterpretq_f32_f64): Likewise. (vreinterpret_f64_f32): Likewise. (vreinterpret_f64_p8): Likewise. (vreinterpret_f64_p16): Likewise. (vreinterpret_f64_s8): Likewise. (vreinterpret_f64_s16): Likewise. (vreinterpret_f64_s32): Likewise. (vreinterpret_f64_s64): Likewise. (vreinterpret_f64_u8): Likewise. (vreinterpret_f64_u16): Likewise. (vreinterpret_f64_u32): Likewise. (vreinterpret_f64_u64): Likewise. (vreinterpretq_f64_f32): Likewise. (vreinterpretq_f64_p8): Likewise. (vreinterpretq_f64_p16): Likewise. (vreinterpretq_f64_s8): Likewise. (vreinterpretq_f64_s16): Likewise. (vreinterpretq_f64_s32): Likewise. (vreinterpretq_f64_s64): Likewise. (vreinterpretq_f64_u8): Likewise. (vreinterpretq_f64_u16): Likewise. (vreinterpretq_f64_u32): Likewise. (vreinterpretq_f64_u64): Likewise. (vreinterpret_s64_f64): Likewise. (vreinterpretq_s64_f64): Likewise. (vreinterpret_u64_f64): Likewise. (vreinterpretq_u64_f64): Likewise. (vreinterpret_s8_f64): Likewise. (vreinterpretq_s8_f64): Likewise. (vreinterpret_s16_f64): Likewise. (vreinterpretq_s16_f64): Likewise. (vreinterpret_s32_f64): Likewise. (vreinterpretq_s32_f64): Likewise. (vreinterpret_u8_f64): Likewise. (vreinterpretq_u8_f64): Likewise. (vreinterpret_u16_f64): Likewise. (vreinterpretq_u16_f64): Likewise. (vreinterpret_u32_f64): Likewise. (vreinterpretq_u32_f64): Likewise. gcc/testsuite/ 2014-02-28 Alex Velenko * gcc.target/aarch64/vreinterpret_f64_1.c: new_testcase diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c index 5e0e9b94653deb1530955d62d9842c39da95058a..8241f918e3fcfb71144daf1c873ba1ed481a4385 100644 --- a/gcc/config/aarch64/aarch64-builtins.c +++ b/gcc/config/aarch64/aarch64-builtins.c @@ -147,6 +147,23 @@ aarch64_types_unopu_qualifiers[SIMD_MAX_BUILTIN_ARGS] = { qualifier_unsigned, qualifier_unsigned }; #define TYPES_UNOPU (aarch64_types_unopu_qualifiers) #define TYPES_CREATE (aarch64_types_unop_qualifiers) +#define TYPES_REINTERP_SS (aarch64_types_unop_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_su_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_none, qualifier_unsigned }; +#define TYPES_REINTERP_SU (aarch64_types_unop_su_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_sp_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_none, qualifier_poly }; +#define TYPES_REINTERP_SP (aarch64_types_unop_sp_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_us_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_unsigned, qualifier_none }; +#define TYPES_REINTERP_US (aarch64_types_unop_us_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_ps_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_pol
Re: [AArch64] 64-bit float vreinterpret implemention
On 02/25/2014 09:02 AM, Alex Velenko wrote: > +(define_expand "aarch64_reinterpretdf" > + [(match_operand:DF 0 "register_operand" "") > + (match_operand:VD_RE 1 "register_operand" "")] > + "TARGET_SIMD" > +{ > + aarch64_simd_reinterpret (operands[0], operands[1]); > + DONE; > +}) I believe you want to implement these in aarch64_fold_builtin to fold to a VIEW_CONVERT_EXPR. No sense in leaving these opaque until rtl expansion. r~
[AArch64] 64-bit float vreinterpret implemention
Hi, This patch introduces vreinterpret implementation for 64-bit float vectors intrinsics and adds testcase for them. This patch tested on LE or BE with no regressions. Is this patch ok for stage-1? Thanks, Alex gcc/ 2014-02-14 Alex Velenko * config/aarch64/aarch64-builtins.c (aarch64_types_su_qualifiers): Qualifier added. (aarch64_types_sp_qualifiers): Likewise. (aarch64_types_us_qualifiers): Likewise. (aarch64_types_ps_qualifiers): Likewise. (TYPES_REINTERP_SS): Type macro added. (TYPES_REINTERP_SU): Likewise. (TYPES_REINTERP_SP): Likewise. (TYPES_REINTERP_US): Likewise. (TYPES_REINTERP_PS): Likewise. * config/aarch64/aarch64-simd-builtins.def (REINTERP): Declarations removed. (REINTERP_SS): Declarations added. (REINTERP_US): Likewise. (REINTERP_PS): Likewise. (REINTERP_SU): Likewise. (REINTERP_SP): Likewise. * config/aarch64/arm_neon.h (vreinterpret_p8_f64): Implemented. (vreinterpretq_p8_f64): Likewise. (vreinterpret_p16_f64): Likewise. (vreinterpretq_p16_f64): Likewise. (vreinterpret_f32_f64): Likewise. (vreinterpretq_f32_f64): Likewise. (vreinterpret_f64_f32): Likewise. (vreinterpret_f64_p8): Likewise. (vreinterpret_f64_p16): Likewise. (vreinterpret_f64_s8): Likewise. (vreinterpret_f64_s16): Likewise. (vreinterpret_f64_s32): Likewise. (vreinterpret_f64_s64): Likewise. (vreinterpret_f64_u8): Likewise. (vreinterpret_f64_u16): Likewise. (vreinterpret_f64_u32): Likewise. (vreinterpret_f64_u64): Likewise. (vreinterpretq_f64_f32): Likewise. (vreinterpretq_f64_p8): Likewise. (vreinterpretq_f64_p16): Likewise. (vreinterpretq_f64_s8): Likewise. (vreinterpretq_f64_s16): Likewise. (vreinterpretq_f64_s32): Likewise. (vreinterpretq_f64_s64): Likewise. (vreinterpretq_f64_u8): Likewise. (vreinterpretq_f64_u16): Likewise. (vreinterpretq_f64_u32): Likewise. (vreinterpretq_f64_u64): Likewise. (vreinterpret_s64_f64): Likewise. (vreinterpretq_s64_f64): Likewise. (vreinterpret_u64_f64): Likewise. (vreinterpretq_u64_f64): Likewise. (vreinterpret_s8_f64): Likewise. (vreinterpretq_s8_f64): Likewise. (vreinterpret_s16_f64): Likewise. (vreinterpretq_s16_f64): Likewise. (vreinterpret_s32_f64): Likewise. (vreinterpretq_s32_f64): Likewise. (vreinterpret_u8_f64): Likewise. (vreinterpretq_u8_f64): Likewise. (vreinterpret_u16_f64): Likewise. (vreinterpretq_u16_f64): Likewise. (vreinterpret_u32_f64): Likewise. (vreinterpretq_u32_f64): Likewise. gcc/testsuite/ 2014-02-14 Alex Velenko * gcc.target/aarch64/vreinterpret_f64_1.c: new_testcase diff --git a/gcc/config/aarch64/aarch64-builtins.c b/gcc/config/aarch64/aarch64-builtins.c index 5e0e9b94653deb1530955d62d9842c39da95058a..0485447d266fd7542d66f01f2d4d4cbc37177079 100644 --- a/gcc/config/aarch64/aarch64-builtins.c +++ b/gcc/config/aarch64/aarch64-builtins.c @@ -147,6 +147,23 @@ aarch64_types_unopu_qualifiers[SIMD_MAX_BUILTIN_ARGS] = { qualifier_unsigned, qualifier_unsigned }; #define TYPES_UNOPU (aarch64_types_unopu_qualifiers) #define TYPES_CREATE (aarch64_types_unop_qualifiers) +#define TYPES_REINTERP_SS (aarch64_types_unop_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_su_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_none, qualifier_unsigned }; +#define TYPES_REINTERP_SU (aarch64_types_unop_su_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_sp_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_none, qualifier_poly }; +#define TYPES_REINTERP_SP (aarch64_types_unop_sp_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_us_qualifiers[SIMD_MAX_BUILTIN_ARGS] += { qualifier_unsigned, qualifier_none }; +#define TYPES_REINTERP_US (aarch64_types_unop_us_qualifiers) +static enum aarch64_type_qualifiers +aarch64_types_unop_ps_qualifiers[SIMD_MAX_BUILTIN_ARGS] += { qualifier_poly, qualifier_none }; +#define TYPES_REINTERP_PS (aarch64_types_unop_ps_qualifiers) static enum aarch64_type_qualifiers aarch64_types_binop_qualifiers[SIMD_MAX_BUILTIN_ARGS] = { qualifier_none, qualifier_none, qualifier_maybe_immediate }; diff --git a/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc/config/aarch64/aarch64-simd-builtins.def index 8a3d7ecbbfc7743310da3f46a03f42a524302c9f..82aceedb4ec3c639df504aaeff9a54a174b6acf8 100644 --- a/gcc/config/aarch64/aarch64-simd-builtins.def +++ b/gcc/config/aarch64/aarch64-simd-builtins.def @@ -51,6 +51,28 @@ VAR1 (GETLANE, get_lane, 0, di) BUILTIN_VALL (GETLANE, be_checked_get_lane, 0) + VAR1 (REINTERP_SS, reinterpretdi, 0, df) + VAR1 (REINTERP_SS, reinterpretv8qi, 0, df) + VAR1 (REINT