mirror of git://gcc.gnu.org/git/gcc.git
[ARM] PR/63870 Add qualifier to check lane bounds in expand
* config/arm/arm-builtins.c (enum arm_type_qualifiers): Add qualifier_lane_index. (arm_binop_imm_qualifiers, BINOP_IMM_QUALIFIERS): New. (arm_getlane_qualifiers): Use qualifier_lane_index. (arm_lanemac_qualifiers): Rename to... (arm_mac_n_qualifiers): ...this. (LANEMAC_QUALIFIERS): Rename to... (MAC_N_QUALIFIERS): ...this. (arm_mac_lane_qualifiers, MAC_LANE_QUALIFIERS): New. (arm_setlane_qualifiers): Use qualifier_lane_index. (arm_ternop_imm_qualifiers, TERNOP_IMM_QUALIFIERS): New. (enum builtin_arg): Add NEON_ARG_LANE_INDEX. (arm_expand_neon_args): Handle NEON_ARG_LANE_INDEX. (arm_expand_neon_builtin): Handle qualifier_lane_index. * config/arm/arm-protos.h (neon_lane_bounds): Add const_tree parameter. * config/arm/arm.c (bounds_check): Likewise, improve error message. (neon_lane_bounds, neon_const_bounds): Add arguments to bounds_check. * config/arm/arm_neon_builtins.def (vshrs_n, vshru_n, vrshrs_n, vrshru_n, vshrn_n, vrshrn_n, vqshrns_n, vqshrnu_n, vqrshrns_n, vqrshrnu_n, vqshrun_n, vqrshrun_n, vshl_n, vqshl_s_n, vqshl_u_n, vqshlu_n, vshlls_n, vshllu_n): Change qualifiers to BINOP_IMM. (vsras_n, vsrau_n, vrsras_n, vrsrau_n, vsri_n, vsli_n): Change qualifiers to TERNOP_IMM. (vdup_lane): Change qualifiers to GETLANE. (vmla_lane, vmlals_lane, vmlalu_lane, vqdmlal_lane, vmls_lane, vmlsls_lane, vmlslu_lane, vqdmlsl_lane): Change qualifiers to MAC_LANE. (vmla_n, vmlals_n, vmlalu_n, vqdmlal_n, vmls_n, vmlsls_n, vmlslu_n, vqdmlsl_n): Change qualifiers to MAC_N. * config/arm/neon.md (neon_vget_lane<mode>, neon_vget_laneu<mode>, neon_vget_lanedi, neon_vget_lanev2di, neon_vset_lane<mode>, neon_vset_lanedi, neon_vdup_lane<mode>, neon_vdup_lanedi, neon_vdup_lanev2di, neon_vmul_lane<mode>, neon_vmul_lane<mode>, neon_vmull<sup>_lane<mode>, neon_vqdmull_lane<mode>, neon_vq<r>dmulh_lane<mode>, neon_vq<r>dmulh_lane<mode>, neon_vmla_lane<mode>, neon_vmla_lane<mode>, neon_vmlal<sup>_lane<mode>, neon_vqdmlal_lane<mode>, neon_vmls_lane<mode>, neon_vmls_lane<mode>, neon_vmlsl<sup>_lane<mode>, neon_vqdmlsl_lane<mode>): Remove call to neon_lane_bounds. From-SVN: r226251
This commit is contained in:
parent
d99dacc948
commit
eaa80f6464
|
|
@ -1,3 +1,47 @@
|
||||||
|
2015-07-27 Alan Lawrence <alan.lawrence@arm.com>
|
||||||
|
|
||||||
|
PR/63870
|
||||||
|
* config/arm/arm-builtins.c (enum arm_type_qualifiers):
|
||||||
|
Add qualifier_lane_index.
|
||||||
|
(arm_binop_imm_qualifiers, BINOP_IMM_QUALIFIERS): New.
|
||||||
|
(arm_getlane_qualifiers): Use qualifier_lane_index.
|
||||||
|
(arm_lanemac_qualifiers): Rename to...
|
||||||
|
(arm_mac_n_qualifiers): ...this.
|
||||||
|
(LANEMAC_QUALIFIERS): Rename to...
|
||||||
|
(MAC_N_QUALIFIERS): ...this.
|
||||||
|
(arm_mac_lane_qualifiers, MAC_LANE_QUALIFIERS): New.
|
||||||
|
(arm_setlane_qualifiers): Use qualifier_lane_index.
|
||||||
|
(arm_ternop_imm_qualifiers, TERNOP_IMM_QUALIFIERS): New.
|
||||||
|
(enum builtin_arg): Add NEON_ARG_LANE_INDEX.
|
||||||
|
(arm_expand_neon_args): Handle NEON_ARG_LANE_INDEX.
|
||||||
|
(arm_expand_neon_builtin): Handle qualifier_lane_index.
|
||||||
|
|
||||||
|
* config/arm/arm-protos.h (neon_lane_bounds): Add const_tree parameter.
|
||||||
|
* config/arm/arm.c (bounds_check): Likewise, improve error message.
|
||||||
|
(neon_lane_bounds, neon_const_bounds): Add arguments to bounds_check.
|
||||||
|
* config/arm/arm_neon_builtins.def (vshrs_n, vshru_n, vrshrs_n,
|
||||||
|
vrshru_n, vshrn_n, vrshrn_n, vqshrns_n, vqshrnu_n, vqrshrns_n,
|
||||||
|
vqrshrnu_n, vqshrun_n, vqrshrun_n, vshl_n, vqshl_s_n, vqshl_u_n,
|
||||||
|
vqshlu_n, vshlls_n, vshllu_n): Change qualifiers to BINOP_IMM.
|
||||||
|
(vsras_n, vsrau_n, vrsras_n, vrsrau_n, vsri_n, vsli_n): Change
|
||||||
|
qualifiers to TERNOP_IMM.
|
||||||
|
(vdup_lane): Change qualifiers to GETLANE.
|
||||||
|
(vmla_lane, vmlals_lane, vmlalu_lane, vqdmlal_lane, vmls_lane,
|
||||||
|
vmlsls_lane, vmlslu_lane, vqdmlsl_lane): Change qualifiers to MAC_LANE.
|
||||||
|
(vmla_n, vmlals_n, vmlalu_n, vqdmlal_n, vmls_n, vmlsls_n, vmlslu_n,
|
||||||
|
vqdmlsl_n): Change qualifiers to MAC_N.
|
||||||
|
|
||||||
|
* config/arm/neon.md (neon_vget_lane<mode>, neon_vget_laneu<mode>,
|
||||||
|
neon_vget_lanedi, neon_vget_lanev2di, neon_vset_lane<mode>,
|
||||||
|
neon_vset_lanedi, neon_vdup_lane<mode>, neon_vdup_lanedi,
|
||||||
|
neon_vdup_lanev2di, neon_vmul_lane<mode>, neon_vmul_lane<mode>,
|
||||||
|
neon_vmull<sup>_lane<mode>, neon_vqdmull_lane<mode>,
|
||||||
|
neon_vq<r>dmulh_lane<mode>, neon_vq<r>dmulh_lane<mode>,
|
||||||
|
neon_vmla_lane<mode>, neon_vmla_lane<mode>, neon_vmlal<sup>_lane<mode>,
|
||||||
|
neon_vqdmlal_lane<mode>, neon_vmls_lane<mode>, neon_vmls_lane<mode>,
|
||||||
|
neon_vmlsl<sup>_lane<mode>, neon_vqdmlsl_lane<mode>):
|
||||||
|
Remove call to neon_lane_bounds.
|
||||||
|
|
||||||
2015-07-27 Wilco Dijkstra <wdijkstr@arm.com>
|
2015-07-27 Wilco Dijkstra <wdijkstr@arm.com>
|
||||||
|
|
||||||
* config/aarch64/aarch64.md (aarch64_ashl_sisd_or_int_<mode>3):
|
* config/aarch64/aarch64.md (aarch64_ashl_sisd_or_int_<mode>3):
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,9 @@ enum arm_type_qualifiers
|
||||||
/* qualifier_const_pointer | qualifier_map_mode */
|
/* qualifier_const_pointer | qualifier_map_mode */
|
||||||
qualifier_const_pointer_map_mode = 0x86,
|
qualifier_const_pointer_map_mode = 0x86,
|
||||||
/* Polynomial types. */
|
/* Polynomial types. */
|
||||||
qualifier_poly = 0x100
|
qualifier_poly = 0x100,
|
||||||
|
/* Lane indices - must be within range of previous argument = a vector. */
|
||||||
|
qualifier_lane_index = 0x200
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The qualifier_internal allows generation of a unary builtin from
|
/* The qualifier_internal allows generation of a unary builtin from
|
||||||
|
|
@ -106,21 +108,40 @@ arm_ternop_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
|
|
||||||
/* T (T, immediate). */
|
/* T (T, immediate). */
|
||||||
static enum arm_type_qualifiers
|
static enum arm_type_qualifiers
|
||||||
arm_getlane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
arm_binop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
= { qualifier_none, qualifier_none, qualifier_immediate };
|
= { qualifier_none, qualifier_none, qualifier_immediate };
|
||||||
|
#define BINOP_IMM_QUALIFIERS (arm_binop_imm_qualifiers)
|
||||||
|
|
||||||
|
/* T (T, lane index). */
|
||||||
|
static enum arm_type_qualifiers
|
||||||
|
arm_getlane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
|
= { qualifier_none, qualifier_none, qualifier_lane_index };
|
||||||
#define GETLANE_QUALIFIERS (arm_getlane_qualifiers)
|
#define GETLANE_QUALIFIERS (arm_getlane_qualifiers)
|
||||||
|
|
||||||
/* T (T, T, T, immediate). */
|
/* T (T, T, T, immediate). */
|
||||||
static enum arm_type_qualifiers
|
static enum arm_type_qualifiers
|
||||||
arm_lanemac_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
arm_mac_n_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
= { qualifier_none, qualifier_none, qualifier_none,
|
= { qualifier_none, qualifier_none, qualifier_none,
|
||||||
qualifier_none, qualifier_immediate };
|
qualifier_none, qualifier_immediate };
|
||||||
#define LANEMAC_QUALIFIERS (arm_lanemac_qualifiers)
|
#define MAC_N_QUALIFIERS (arm_mac_n_qualifiers)
|
||||||
|
|
||||||
|
/* T (T, T, T, lane index). */
|
||||||
|
static enum arm_type_qualifiers
|
||||||
|
arm_mac_lane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
|
= { qualifier_none, qualifier_none, qualifier_none,
|
||||||
|
qualifier_none, qualifier_lane_index };
|
||||||
|
#define MAC_LANE_QUALIFIERS (arm_mac_lane_qualifiers)
|
||||||
|
|
||||||
/* T (T, T, immediate). */
|
/* T (T, T, immediate). */
|
||||||
static enum arm_type_qualifiers
|
static enum arm_type_qualifiers
|
||||||
arm_setlane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
arm_ternop_imm_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
= { qualifier_none, qualifier_none, qualifier_none, qualifier_immediate };
|
= { qualifier_none, qualifier_none, qualifier_none, qualifier_immediate };
|
||||||
|
#define TERNOP_IMM_QUALIFIERS (arm_ternop_imm_qualifiers)
|
||||||
|
|
||||||
|
/* T (T, T, lane index). */
|
||||||
|
static enum arm_type_qualifiers
|
||||||
|
arm_setlane_qualifiers[SIMD_MAX_BUILTIN_ARGS]
|
||||||
|
= { qualifier_none, qualifier_none, qualifier_none, qualifier_lane_index };
|
||||||
#define SETLANE_QUALIFIERS (arm_setlane_qualifiers)
|
#define SETLANE_QUALIFIERS (arm_setlane_qualifiers)
|
||||||
|
|
||||||
/* T (T, T). */
|
/* T (T, T). */
|
||||||
|
|
@ -1925,6 +1946,7 @@ arm_expand_unop_builtin (enum insn_code icode,
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NEON_ARG_COPY_TO_REG,
|
NEON_ARG_COPY_TO_REG,
|
||||||
NEON_ARG_CONSTANT,
|
NEON_ARG_CONSTANT,
|
||||||
|
NEON_ARG_LANE_INDEX,
|
||||||
NEON_ARG_MEMORY,
|
NEON_ARG_MEMORY,
|
||||||
NEON_ARG_STOP
|
NEON_ARG_STOP
|
||||||
} builtin_arg;
|
} builtin_arg;
|
||||||
|
|
@ -2041,6 +2063,16 @@ arm_expand_neon_args (rtx target, machine_mode map_mode, int fcode,
|
||||||
op[argc] = copy_to_mode_reg (mode[argc], op[argc]);
|
op[argc] = copy_to_mode_reg (mode[argc], op[argc]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NEON_ARG_LANE_INDEX:
|
||||||
|
/* Previous argument must be a vector, which this indexes. */
|
||||||
|
gcc_assert (argc > 0);
|
||||||
|
if (CONST_INT_P (op[argc]))
|
||||||
|
{
|
||||||
|
enum machine_mode vmode = mode[argc - 1];
|
||||||
|
neon_lane_bounds (op[argc], 0, GET_MODE_NUNITS (vmode), exp);
|
||||||
|
}
|
||||||
|
/* Fall through - if the lane index isn't a constant then
|
||||||
|
the next case will error. */
|
||||||
case NEON_ARG_CONSTANT:
|
case NEON_ARG_CONSTANT:
|
||||||
if (!(*insn_data[icode].operand[opno].predicate)
|
if (!(*insn_data[icode].operand[opno].predicate)
|
||||||
(op[argc], mode[argc]))
|
(op[argc], mode[argc]))
|
||||||
|
|
@ -2168,7 +2200,9 @@ arm_expand_neon_builtin (int fcode, tree exp, rtx target)
|
||||||
int operands_k = k - is_void;
|
int operands_k = k - is_void;
|
||||||
int expr_args_k = k - 1;
|
int expr_args_k = k - 1;
|
||||||
|
|
||||||
if (d->qualifiers[qualifiers_k] & qualifier_immediate)
|
if (d->qualifiers[qualifiers_k] & qualifier_lane_index)
|
||||||
|
args[k] = NEON_ARG_LANE_INDEX;
|
||||||
|
else if (d->qualifiers[qualifiers_k] & qualifier_immediate)
|
||||||
args[k] = NEON_ARG_CONSTANT;
|
args[k] = NEON_ARG_CONSTANT;
|
||||||
else if (d->qualifiers[qualifiers_k] & qualifier_maybe_immediate)
|
else if (d->qualifiers[qualifiers_k] & qualifier_maybe_immediate)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ extern void neon_pairwise_reduce (rtx, rtx, machine_mode,
|
||||||
extern rtx neon_make_constant (rtx);
|
extern rtx neon_make_constant (rtx);
|
||||||
extern tree arm_builtin_vectorized_function (tree, tree, tree);
|
extern tree arm_builtin_vectorized_function (tree, tree, tree);
|
||||||
extern void neon_expand_vector_init (rtx, rtx);
|
extern void neon_expand_vector_init (rtx, rtx);
|
||||||
extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
|
extern void neon_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT, const_tree);
|
||||||
extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
|
extern void neon_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
|
||||||
extern HOST_WIDE_INT neon_element_bits (machine_mode);
|
extern HOST_WIDE_INT neon_element_bits (machine_mode);
|
||||||
extern void neon_reinterpret (rtx, rtx);
|
extern void neon_reinterpret (rtx, rtx);
|
||||||
|
|
|
||||||
|
|
@ -12789,12 +12789,12 @@ neon_expand_vector_init (rtx target, rtx vals)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure OPERAND lies between LOW (inclusive) and HIGH (exclusive). Raise
|
/* Ensure OPERAND lies between LOW (inclusive) and HIGH (exclusive). Raise
|
||||||
ERR if it doesn't. FIXME: NEON bounds checks occur late in compilation, so
|
ERR if it doesn't. EXP indicates the source location, which includes the
|
||||||
reported source locations are bogus. */
|
inlining history for intrinsics. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
bounds_check (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high,
|
bounds_check (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high,
|
||||||
const char *err)
|
const_tree exp, const char *desc)
|
||||||
{
|
{
|
||||||
HOST_WIDE_INT lane;
|
HOST_WIDE_INT lane;
|
||||||
|
|
||||||
|
|
@ -12803,15 +12803,22 @@ bounds_check (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high,
|
||||||
lane = INTVAL (operand);
|
lane = INTVAL (operand);
|
||||||
|
|
||||||
if (lane < low || lane >= high)
|
if (lane < low || lane >= high)
|
||||||
error (err);
|
{
|
||||||
|
if (exp)
|
||||||
|
error ("%K%s %lld out of range %lld - %lld",
|
||||||
|
exp, desc, lane, low, high - 1);
|
||||||
|
else
|
||||||
|
error ("%s %lld out of range %lld - %lld", desc, lane, low, high - 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bounds-check lanes. */
|
/* Bounds-check lanes. */
|
||||||
|
|
||||||
void
|
void
|
||||||
neon_lane_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high)
|
neon_lane_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high,
|
||||||
|
const_tree exp)
|
||||||
{
|
{
|
||||||
bounds_check (operand, low, high, "lane out of range");
|
bounds_check (operand, low, high, exp, "lane");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Bounds-check constants. */
|
/* Bounds-check constants. */
|
||||||
|
|
@ -12819,7 +12826,7 @@ neon_lane_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high)
|
||||||
void
|
void
|
||||||
neon_const_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high)
|
neon_const_bounds (rtx operand, HOST_WIDE_INT low, HOST_WIDE_INT high)
|
||||||
{
|
{
|
||||||
bounds_check (operand, low, high, "constant out of range");
|
bounds_check (operand, low, high, NULL_TREE, "constant");
|
||||||
}
|
}
|
||||||
|
|
||||||
HOST_WIDE_INT
|
HOST_WIDE_INT
|
||||||
|
|
|
||||||
|
|
@ -67,28 +67,28 @@ VAR8 (BINOP, vqshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (BINOP, vqshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP, vqshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (BINOP, vqrshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP, vqrshls, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (BINOP, vqrshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP, vqrshlu, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vrshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vrshrs_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vrshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vrshru_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vshrn_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vshrn_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vrshrn_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vrshrn_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vqshrns_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vqshrns_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vqshrnu_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vqshrnu_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vqrshrns_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vqrshrns_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vqrshrnu_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vqrshrnu_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vqshrun_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vqshrun_n, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vqrshrun_n, v8hi, v4si, v2di)
|
VAR3 (BINOP_IMM, vqrshrun_n, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vshl_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vqshl_s_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vqshl_s_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vqshl_u_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vqshl_u_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (GETLANE, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (BINOP_IMM, vqshlu_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR3 (GETLANE, vshlls_n, v8qi, v4hi, v2si)
|
VAR3 (BINOP_IMM, vshlls_n, v8qi, v4hi, v2si)
|
||||||
VAR3 (GETLANE, vshllu_n, v8qi, v4hi, v2si)
|
VAR3 (BINOP_IMM, vshllu_n, v8qi, v4hi, v2si)
|
||||||
VAR8 (SETLANE, vsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (TERNOP_IMM, vsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (SETLANE, vsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (TERNOP_IMM, vsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (SETLANE, vrsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (TERNOP_IMM, vrsras_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (SETLANE, vrsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (TERNOP_IMM, vrsrau_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR2 (BINOP, vsub, v2sf, v4sf)
|
VAR2 (BINOP, vsub, v2sf, v4sf)
|
||||||
VAR3 (BINOP, vsubls, v8qi, v4hi, v2si)
|
VAR3 (BINOP, vsubls, v8qi, v4hi, v2si)
|
||||||
VAR3 (BINOP, vsublu, v8qi, v4hi, v2si)
|
VAR3 (BINOP, vsublu, v8qi, v4hi, v2si)
|
||||||
|
|
@ -140,8 +140,8 @@ VAR6 (BINOP, vpadals, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
|
||||||
VAR6 (BINOP, vpadalu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
|
VAR6 (BINOP, vpadalu, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
|
||||||
VAR2 (BINOP, vrecps, v2sf, v4sf)
|
VAR2 (BINOP, vrecps, v2sf, v4sf)
|
||||||
VAR2 (BINOP, vrsqrts, v2sf, v4sf)
|
VAR2 (BINOP, vrsqrts, v2sf, v4sf)
|
||||||
VAR8 (SETLANE, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (TERNOP_IMM, vsri_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (SETLANE, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
VAR8 (TERNOP_IMM, vsli_n, v8qi, v4hi, v2si, di, v16qi, v8hi, v4si, v2di)
|
||||||
VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
|
VAR8 (UNOP, vabs, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
|
||||||
VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
|
VAR6 (UNOP, vqabs, v8qi, v4hi, v2si, v16qi, v8hi, v4si)
|
||||||
VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
|
VAR8 (UNOP, vneg, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
|
||||||
|
|
@ -162,7 +162,7 @@ VAR10 (SETLANE, vset_lane,
|
||||||
VAR5 (UNOP, vcreate, v8qi, v4hi, v2si, v2sf, di)
|
VAR5 (UNOP, vcreate, v8qi, v4hi, v2si, v2sf, di)
|
||||||
VAR10 (UNOP, vdup_n,
|
VAR10 (UNOP, vdup_n,
|
||||||
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
|
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
|
||||||
VAR10 (BINOP, vdup_lane,
|
VAR10 (GETLANE, vdup_lane,
|
||||||
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
|
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
|
||||||
VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di)
|
VAR5 (COMBINE, vcombine, v8qi, v4hi, v2si, v2sf, di)
|
||||||
VAR5 (UNOP, vget_high, v16qi, v8hi, v4si, v4sf, v2di)
|
VAR5 (UNOP, vget_high, v16qi, v8hi, v4si, v4sf, v2di)
|
||||||
|
|
@ -174,23 +174,23 @@ VAR3 (UNOP, vqmovun, v8hi, v4si, v2di)
|
||||||
VAR3 (UNOP, vmovls, v8qi, v4hi, v2si)
|
VAR3 (UNOP, vmovls, v8qi, v4hi, v2si)
|
||||||
VAR3 (UNOP, vmovlu, v8qi, v4hi, v2si)
|
VAR3 (UNOP, vmovlu, v8qi, v4hi, v2si)
|
||||||
VAR6 (SETLANE, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
VAR6 (SETLANE, vmul_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
||||||
VAR6 (LANEMAC, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
VAR6 (MAC_LANE, vmla_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
||||||
VAR2 (LANEMAC, vmlals_lane, v4hi, v2si)
|
VAR2 (MAC_LANE, vmlals_lane, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vmlalu_lane, v4hi, v2si)
|
VAR2 (MAC_LANE, vmlalu_lane, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vqdmlal_lane, v4hi, v2si)
|
VAR2 (MAC_LANE, vqdmlal_lane, v4hi, v2si)
|
||||||
VAR6 (LANEMAC, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
VAR6 (MAC_LANE, vmls_lane, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
||||||
VAR2 (LANEMAC, vmlsls_lane, v4hi, v2si)
|
VAR2 (MAC_LANE, vmlsls_lane, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vmlslu_lane, v4hi, v2si)
|
VAR2 (MAC_LANE, vmlslu_lane, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vqdmlsl_lane, v4hi, v2si)
|
VAR2 (MAC_LANE, vqdmlsl_lane, v4hi, v2si)
|
||||||
VAR6 (BINOP, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
VAR6 (BINOP, vmul_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
||||||
VAR6 (LANEMAC, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
VAR6 (MAC_N, vmla_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
||||||
VAR2 (LANEMAC, vmlals_n, v4hi, v2si)
|
VAR2 (MAC_N, vmlals_n, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vmlalu_n, v4hi, v2si)
|
VAR2 (MAC_N, vmlalu_n, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vqdmlal_n, v4hi, v2si)
|
VAR2 (MAC_N, vqdmlal_n, v4hi, v2si)
|
||||||
VAR6 (LANEMAC, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
VAR6 (MAC_N, vmls_n, v4hi, v2si, v2sf, v8hi, v4si, v4sf)
|
||||||
VAR2 (LANEMAC, vmlsls_n, v4hi, v2si)
|
VAR2 (MAC_N, vmlsls_n, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vmlslu_n, v4hi, v2si)
|
VAR2 (MAC_N, vmlslu_n, v4hi, v2si)
|
||||||
VAR2 (LANEMAC, vqdmlsl_n, v4hi, v2si)
|
VAR2 (MAC_N, vqdmlsl_n, v4hi, v2si)
|
||||||
VAR10 (SETLANE, vext,
|
VAR10 (SETLANE, vext,
|
||||||
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
|
v8qi, v4hi, v2si, v2sf, di, v16qi, v8hi, v4si, v4sf, v2di)
|
||||||
VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
|
VAR8 (UNOP, vrev64, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf)
|
||||||
|
|
|
||||||
|
|
@ -2663,8 +2663,6 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "")]
|
(match_operand:SI 2 "immediate_operand" "")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
if (BYTES_BIG_ENDIAN)
|
||||||
{
|
{
|
||||||
/* The intrinsics are defined in terms of a model where the
|
/* The intrinsics are defined in terms of a model where the
|
||||||
|
|
@ -2694,8 +2692,6 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "")]
|
(match_operand:SI 2 "immediate_operand" "")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
if (BYTES_BIG_ENDIAN)
|
||||||
{
|
{
|
||||||
/* The intrinsics are defined in terms of a model where the
|
/* The intrinsics are defined in terms of a model where the
|
||||||
|
|
@ -2725,7 +2721,6 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "")]
|
(match_operand:SI 2 "immediate_operand" "")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[2], 0, 1);
|
|
||||||
emit_move_insn (operands[0], operands[1]);
|
emit_move_insn (operands[0], operands[1]);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
@ -2736,18 +2731,11 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "")]
|
(match_operand:SI 2 "immediate_operand" "")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
switch (INTVAL (operands[2]))
|
int lane = INTVAL (operands[2]);
|
||||||
{
|
gcc_assert ((lane ==0) || (lane == 1));
|
||||||
case 0:
|
emit_move_insn (operands[0], lane == 0
|
||||||
emit_move_insn (operands[0], gen_lowpart (DImode, operands[1]));
|
? gen_lowpart (DImode, operands[1])
|
||||||
break;
|
: gen_highpart (DImode, operands[1]));
|
||||||
case 1:
|
|
||||||
emit_move_insn (operands[0], gen_highpart (DImode, operands[1]));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
neon_lane_bounds (operands[2], 0, 1);
|
|
||||||
FAIL;
|
|
||||||
}
|
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -2759,7 +2747,6 @@
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
unsigned int elt = INTVAL (operands[3]);
|
unsigned int elt = INTVAL (operands[3]);
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
if (BYTES_BIG_ENDIAN)
|
||||||
{
|
{
|
||||||
|
|
@ -2782,7 +2769,6 @@
|
||||||
(match_operand:SI 3 "immediate_operand" "i")]
|
(match_operand:SI 3 "immediate_operand" "i")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, 1);
|
|
||||||
emit_move_insn (operands[0], operands[1]);
|
emit_move_insn (operands[0], operands[1]);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
@ -2864,7 +2850,6 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "i")]
|
(match_operand:SI 2 "immediate_operand" "i")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[2], 0, GET_MODE_NUNITS (<V_double_vector_mode>mode));
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
if (BYTES_BIG_ENDIAN)
|
||||||
{
|
{
|
||||||
unsigned int elt = INTVAL (operands[2]);
|
unsigned int elt = INTVAL (operands[2]);
|
||||||
|
|
@ -2885,7 +2870,6 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "i")]
|
(match_operand:SI 2 "immediate_operand" "i")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[2], 0, 1);
|
|
||||||
emit_move_insn (operands[0], operands[1]);
|
emit_move_insn (operands[0], operands[1]);
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
@ -2897,7 +2881,6 @@
|
||||||
(match_operand:SI 2 "immediate_operand" "i")]
|
(match_operand:SI 2 "immediate_operand" "i")]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[2], 0, 1);
|
|
||||||
emit_insn (gen_neon_vdup_nv2di (operands[0], operands[1]));
|
emit_insn (gen_neon_vdup_nv2di (operands[0], operands[1]));
|
||||||
DONE;
|
DONE;
|
||||||
})
|
})
|
||||||
|
|
@ -3097,7 +3080,6 @@
|
||||||
UNSPEC_VMUL_LANE))]
|
UNSPEC_VMUL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmul.<V_if_elem>\t%P0, %P1, %P2[%c3]";
|
return "vmul.<V_if_elem>\t%P0, %P1, %P2[%c3]";
|
||||||
}
|
}
|
||||||
[(set (attr "type")
|
[(set (attr "type")
|
||||||
|
|
@ -3115,7 +3097,6 @@
|
||||||
UNSPEC_VMUL_LANE))]
|
UNSPEC_VMUL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<V_HALF>mode));
|
|
||||||
return "vmul.<V_if_elem>\t%q0, %q1, %P2[%c3]";
|
return "vmul.<V_if_elem>\t%q0, %q1, %P2[%c3]";
|
||||||
}
|
}
|
||||||
[(set (attr "type")
|
[(set (attr "type")
|
||||||
|
|
@ -3133,7 +3114,6 @@
|
||||||
VMULL_LANE))]
|
VMULL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmull.<sup>%#<V_sz_elem>\t%q0, %P1, %P2[%c3]";
|
return "vmull.<sup>%#<V_sz_elem>\t%q0, %P1, %P2[%c3]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_mul_<V_elem_ch>_scalar_long")]
|
[(set_attr "type" "neon_mul_<V_elem_ch>_scalar_long")]
|
||||||
|
|
@ -3148,7 +3128,6 @@
|
||||||
UNSPEC_VQDMULL_LANE))]
|
UNSPEC_VQDMULL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vqdmull.<V_s_elem>\t%q0, %P1, %P2[%c3]";
|
return "vqdmull.<V_s_elem>\t%q0, %P1, %P2[%c3]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_sat_mul_<V_elem_ch>_scalar_long")]
|
[(set_attr "type" "neon_sat_mul_<V_elem_ch>_scalar_long")]
|
||||||
|
|
@ -3163,7 +3142,6 @@
|
||||||
VQDMULH_LANE))]
|
VQDMULH_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vq<r>dmulh.<V_s_elem>\t%q0, %q1, %P2[%c3]";
|
return "vq<r>dmulh.<V_s_elem>\t%q0, %q1, %P2[%c3]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_sat_mul_<V_elem_ch>_scalar_q")]
|
[(set_attr "type" "neon_sat_mul_<V_elem_ch>_scalar_q")]
|
||||||
|
|
@ -3178,7 +3156,6 @@
|
||||||
VQDMULH_LANE))]
|
VQDMULH_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vq<r>dmulh.<V_s_elem>\t%P0, %P1, %P2[%c3]";
|
return "vq<r>dmulh.<V_s_elem>\t%P0, %P1, %P2[%c3]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_sat_mul_<V_elem_ch>_scalar_q")]
|
[(set_attr "type" "neon_sat_mul_<V_elem_ch>_scalar_q")]
|
||||||
|
|
@ -3194,7 +3171,6 @@
|
||||||
UNSPEC_VMLA_LANE))]
|
UNSPEC_VMLA_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmla.<V_if_elem>\t%P0, %P2, %P3[%c4]";
|
return "vmla.<V_if_elem>\t%P0, %P2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set (attr "type")
|
[(set (attr "type")
|
||||||
|
|
@ -3213,7 +3189,6 @@
|
||||||
UNSPEC_VMLA_LANE))]
|
UNSPEC_VMLA_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmla.<V_if_elem>\t%q0, %q2, %P3[%c4]";
|
return "vmla.<V_if_elem>\t%q0, %q2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set (attr "type")
|
[(set (attr "type")
|
||||||
|
|
@ -3232,7 +3207,6 @@
|
||||||
VMLAL_LANE))]
|
VMLAL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmlal.<sup>%#<V_sz_elem>\t%q0, %P2, %P3[%c4]";
|
return "vmlal.<sup>%#<V_sz_elem>\t%q0, %P2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_mla_<V_elem_ch>_scalar_long")]
|
[(set_attr "type" "neon_mla_<V_elem_ch>_scalar_long")]
|
||||||
|
|
@ -3248,7 +3222,6 @@
|
||||||
UNSPEC_VQDMLAL_LANE))]
|
UNSPEC_VQDMLAL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vqdmlal.<V_s_elem>\t%q0, %P2, %P3[%c4]";
|
return "vqdmlal.<V_s_elem>\t%q0, %P2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_sat_mla_<V_elem_ch>_scalar_long")]
|
[(set_attr "type" "neon_sat_mla_<V_elem_ch>_scalar_long")]
|
||||||
|
|
@ -3264,7 +3237,6 @@
|
||||||
UNSPEC_VMLS_LANE))]
|
UNSPEC_VMLS_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmls.<V_if_elem>\t%P0, %P2, %P3[%c4]";
|
return "vmls.<V_if_elem>\t%P0, %P2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set (attr "type")
|
[(set (attr "type")
|
||||||
|
|
@ -3283,7 +3255,6 @@
|
||||||
UNSPEC_VMLS_LANE))]
|
UNSPEC_VMLS_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmls.<V_if_elem>\t%q0, %q2, %P3[%c4]";
|
return "vmls.<V_if_elem>\t%q0, %q2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set (attr "type")
|
[(set (attr "type")
|
||||||
|
|
@ -3302,7 +3273,6 @@
|
||||||
VMLSL_LANE))]
|
VMLSL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vmlsl.<sup>%#<V_sz_elem>\t%q0, %P2, %P3[%c4]";
|
return "vmlsl.<sup>%#<V_sz_elem>\t%q0, %P2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_mla_<V_elem_ch>_scalar_long")]
|
[(set_attr "type" "neon_mla_<V_elem_ch>_scalar_long")]
|
||||||
|
|
@ -3318,7 +3288,6 @@
|
||||||
UNSPEC_VQDMLSL_LANE))]
|
UNSPEC_VQDMLSL_LANE))]
|
||||||
"TARGET_NEON"
|
"TARGET_NEON"
|
||||||
{
|
{
|
||||||
neon_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
|
|
||||||
return "vqdmlsl.<V_s_elem>\t%q0, %P2, %P3[%c4]";
|
return "vqdmlsl.<V_s_elem>\t%q0, %P2, %P3[%c4]";
|
||||||
}
|
}
|
||||||
[(set_attr "type" "neon_sat_mla_<V_elem_ch>_scalar_long")]
|
[(set_attr "type" "neon_sat_mla_<V_elem_ch>_scalar_long")]
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue