genopinit.c: Include tm_p.h in generated file.
* genopinit.c: Include tm_p.h in generated file. * config/arm/neon.md (vec_set<mode>_internal): Use INTVAL to extract the integer from operands[2]. (vec_setv2di_internal): Likewise. * config/arm/arm.c (arm_size_return_regs): Make return type unsigned. (arm_init_neon_builtins): Move code after declarations. From-SVN: r130736
This commit is contained in:
parent
7fb446a36d
commit
466e4b7a17
4 changed files with 58 additions and 45 deletions
|
@ -1,3 +1,15 @@
|
|||
2007-12-10 Kaz Kojima <kkojima@gcc.gnu.org>
|
||||
|
||||
* genopinit.c: Include tm_p.h in generated file.
|
||||
|
||||
* config/arm/neon.md (vec_set<mode>_internal): Use INTVAL
|
||||
to extract the integer from operands[2].
|
||||
(vec_setv2di_internal): Likewise.
|
||||
|
||||
* config/arm/arm.c (arm_size_return_regs): Make return type
|
||||
unsigned.
|
||||
(arm_init_neon_builtins): Move code after declarations.
|
||||
|
||||
2007-12-10 Hans-Peter Nilsson <hp@axis.com>
|
||||
|
||||
* reload.c (find_reloads_address_1): To properly mark as an
|
||||
|
|
|
@ -77,7 +77,7 @@ static bool thumb_force_lr_save (void);
|
|||
static unsigned long thumb1_compute_save_reg_mask (void);
|
||||
static int const_ok_for_op (HOST_WIDE_INT, enum rtx_code);
|
||||
static rtx emit_sfm (int, int);
|
||||
static int arm_size_return_regs (void);
|
||||
static unsigned arm_size_return_regs (void);
|
||||
static bool arm_assemble_integer (rtx, unsigned int, int);
|
||||
static const char *fp_const_from_val (REAL_VALUE_TYPE *);
|
||||
static arm_cc get_arm_condition_code (rtx);
|
||||
|
@ -11801,7 +11801,7 @@ emit_multi_reg_push (unsigned long mask)
|
|||
}
|
||||
|
||||
/* Calculate the size of the return value that is passed in registers. */
|
||||
static int
|
||||
static unsigned
|
||||
arm_size_return_regs (void)
|
||||
{
|
||||
enum machine_mode mode;
|
||||
|
@ -14839,27 +14839,6 @@ arm_init_neon_builtins (void)
|
|||
tree neon_intSI_type_node = make_signed_type (GET_MODE_PRECISION (SImode));
|
||||
tree neon_intDI_type_node = make_signed_type (GET_MODE_PRECISION (DImode));
|
||||
tree neon_float_type_node = make_node (REAL_TYPE);
|
||||
TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
|
||||
layout_type (neon_float_type_node);
|
||||
|
||||
/* Define typedefs which exactly correspond to the modes we are basing vector
|
||||
types on. If you change these names you'll need to change
|
||||
the table used by arm_mangle_type too. */
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intQI_type_node,
|
||||
"__builtin_neon_qi");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intHI_type_node,
|
||||
"__builtin_neon_hi");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intSI_type_node,
|
||||
"__builtin_neon_si");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_float_type_node,
|
||||
"__builtin_neon_sf");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intDI_type_node,
|
||||
"__builtin_neon_di");
|
||||
|
||||
(*lang_hooks.types.register_builtin_type) (neon_polyQI_type_node,
|
||||
"__builtin_neon_poly8");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_polyHI_type_node,
|
||||
"__builtin_neon_poly16");
|
||||
|
||||
tree intQI_pointer_node = build_pointer_type (neon_intQI_type_node);
|
||||
tree intHI_pointer_node = build_pointer_type (neon_intHI_type_node);
|
||||
|
@ -14913,32 +14892,12 @@ arm_init_neon_builtins (void)
|
|||
tree intUSI_type_node = make_unsigned_type (GET_MODE_PRECISION (SImode));
|
||||
tree intUDI_type_node = make_unsigned_type (GET_MODE_PRECISION (DImode));
|
||||
|
||||
(*lang_hooks.types.register_builtin_type) (intUQI_type_node,
|
||||
"__builtin_neon_uqi");
|
||||
(*lang_hooks.types.register_builtin_type) (intUHI_type_node,
|
||||
"__builtin_neon_uhi");
|
||||
(*lang_hooks.types.register_builtin_type) (intUSI_type_node,
|
||||
"__builtin_neon_usi");
|
||||
(*lang_hooks.types.register_builtin_type) (intUDI_type_node,
|
||||
"__builtin_neon_udi");
|
||||
|
||||
/* Opaque integer types for structures of vectors. */
|
||||
tree intEI_type_node = make_signed_type (GET_MODE_PRECISION (EImode));
|
||||
tree intOI_type_node = make_signed_type (GET_MODE_PRECISION (OImode));
|
||||
tree intCI_type_node = make_signed_type (GET_MODE_PRECISION (CImode));
|
||||
tree intXI_type_node = make_signed_type (GET_MODE_PRECISION (XImode));
|
||||
|
||||
(*lang_hooks.types.register_builtin_type) (intTI_type_node,
|
||||
"__builtin_neon_ti");
|
||||
(*lang_hooks.types.register_builtin_type) (intEI_type_node,
|
||||
"__builtin_neon_ei");
|
||||
(*lang_hooks.types.register_builtin_type) (intOI_type_node,
|
||||
"__builtin_neon_oi");
|
||||
(*lang_hooks.types.register_builtin_type) (intCI_type_node,
|
||||
"__builtin_neon_ci");
|
||||
(*lang_hooks.types.register_builtin_type) (intXI_type_node,
|
||||
"__builtin_neon_xi");
|
||||
|
||||
/* Pointers to vector types. */
|
||||
tree V8QI_pointer_node = build_pointer_type (V8QI_type_node);
|
||||
tree V4HI_pointer_node = build_pointer_type (V4HI_type_node);
|
||||
|
@ -14986,6 +14945,47 @@ arm_init_neon_builtins (void)
|
|||
tree reinterp_ftype_qreg[5][5];
|
||||
tree dreg_types[5], qreg_types[5];
|
||||
|
||||
TYPE_PRECISION (neon_float_type_node) = FLOAT_TYPE_SIZE;
|
||||
layout_type (neon_float_type_node);
|
||||
|
||||
/* Define typedefs which exactly correspond to the modes we are basing vector
|
||||
types on. If you change these names you'll need to change
|
||||
the table used by arm_mangle_type too. */
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intQI_type_node,
|
||||
"__builtin_neon_qi");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intHI_type_node,
|
||||
"__builtin_neon_hi");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intSI_type_node,
|
||||
"__builtin_neon_si");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_float_type_node,
|
||||
"__builtin_neon_sf");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_intDI_type_node,
|
||||
"__builtin_neon_di");
|
||||
|
||||
(*lang_hooks.types.register_builtin_type) (neon_polyQI_type_node,
|
||||
"__builtin_neon_poly8");
|
||||
(*lang_hooks.types.register_builtin_type) (neon_polyHI_type_node,
|
||||
"__builtin_neon_poly16");
|
||||
(*lang_hooks.types.register_builtin_type) (intUQI_type_node,
|
||||
"__builtin_neon_uqi");
|
||||
(*lang_hooks.types.register_builtin_type) (intUHI_type_node,
|
||||
"__builtin_neon_uhi");
|
||||
(*lang_hooks.types.register_builtin_type) (intUSI_type_node,
|
||||
"__builtin_neon_usi");
|
||||
(*lang_hooks.types.register_builtin_type) (intUDI_type_node,
|
||||
"__builtin_neon_udi");
|
||||
|
||||
(*lang_hooks.types.register_builtin_type) (intTI_type_node,
|
||||
"__builtin_neon_ti");
|
||||
(*lang_hooks.types.register_builtin_type) (intEI_type_node,
|
||||
"__builtin_neon_ei");
|
||||
(*lang_hooks.types.register_builtin_type) (intOI_type_node,
|
||||
"__builtin_neon_oi");
|
||||
(*lang_hooks.types.register_builtin_type) (intCI_type_node,
|
||||
"__builtin_neon_ci");
|
||||
(*lang_hooks.types.register_builtin_type) (intXI_type_node,
|
||||
"__builtin_neon_xi");
|
||||
|
||||
dreg_types[0] = V8QI_type_node;
|
||||
dreg_types[1] = V4HI_type_node;
|
||||
dreg_types[2] = V2SI_type_node;
|
||||
|
|
|
@ -751,7 +751,7 @@
|
|||
(match_operand:SI 2 "immediate_operand" "i")))]
|
||||
"TARGET_NEON"
|
||||
{
|
||||
HOST_WIDE_INT elem = ffs (operands[2]) - 1;
|
||||
HOST_WIDE_INT elem = ffs ((int) INTVAL (operands[2])) - 1;
|
||||
int half_elts = GET_MODE_NUNITS (<MODE>mode) / 2;
|
||||
int elt = elem % half_elts;
|
||||
int hi = (elem / half_elts) * 2;
|
||||
|
@ -775,7 +775,7 @@
|
|||
(match_operand:SI 2 "immediate_operand" "i")))]
|
||||
"TARGET_NEON"
|
||||
{
|
||||
HOST_WIDE_INT elem = ffs (operands[2]) - 1;
|
||||
HOST_WIDE_INT elem = ffs ((int) INTVAL (operands[2])) - 1;
|
||||
int regno = REGNO (operands[0]) + 2 * elem;
|
||||
|
||||
operands[0] = gen_rtx_REG (DImode, regno);
|
||||
|
|
|
@ -480,6 +480,7 @@ from the machine description file `md'. */\n\n");
|
|||
printf ("#include \"coretypes.h\"\n");
|
||||
printf ("#include \"tm.h\"\n");
|
||||
printf ("#include \"rtl.h\"\n");
|
||||
printf ("#include \"tm_p.h\"\n");
|
||||
printf ("#include \"flags.h\"\n");
|
||||
printf ("#include \"insn-config.h\"\n");
|
||||
printf ("#include \"recog.h\"\n");
|
||||
|
|
Loading…
Add table
Reference in a new issue