From: Hans-Peter Nilsson Date: Mon, 16 Jul 2012 03:31:12 +0000 (+0000) Subject: cris-protos.h (cris_legitimate_address_p): Declare. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a502bdb63638a07e818ee89e4c70d650c1e9db2b;p=gcc.git cris-protos.h (cris_legitimate_address_p): Declare. * config/cris/cris-protos.h (cris_legitimate_address_p): Declare. * config/cris/cris.h (CONSTANT_ADDRESS_P): Define in terms of CONSTANT_P and cris_legitimate_address_p. * config/cris/cris.c (cris_legitimate_address_p): Make non-static. From-SVN: r189507 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a1f11250f07..6452d3fc8b8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,11 @@ 2012-07-16 Hans-Peter Nilsson - * config/cris/cris.c (cris_preferred_reload_class): - Don't return GENERAL_REGS as preferred to MOF_SRP_REGS. + * config/cris/cris-protos.h (cris_legitimate_address_p): Declare. + * config/cris/cris.h (CONSTANT_ADDRESS_P): Define in terms of + CONSTANT_P and cris_legitimate_address_p. + * config/cris/cris.c (cris_legitimate_address_p): Make non-static. + (cris_preferred_reload_class): Don't return GENERAL_REGS as + preferred to MOF_SRP_REGS. * config/cris/cris.c (cris_init_libfuncs): Handle initialization of library functions for basic atomic compare-and-swap. diff --git a/gcc/config/cris/cris-protos.h b/gcc/config/cris/cris-protos.h index d08dac5dab0..167f14c6e9c 100644 --- a/gcc/config/cris/cris-protos.h +++ b/gcc/config/cris/cris-protos.h @@ -40,6 +40,7 @@ extern bool cris_base_p (const_rtx, bool); extern bool cris_base_or_autoincr_p (const_rtx, bool); extern bool cris_bdap_index_p (const_rtx, bool); extern bool cris_biap_index_p (const_rtx, bool); +extern bool cris_legitimate_address_p (enum machine_mode, rtx, bool); extern bool cris_store_multiple_op_p (rtx); extern bool cris_movem_load_rest_p (rtx, int); extern void cris_asm_output_symbol_ref (FILE *, rtx); diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index d5709b34b90..ea98641b903 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -127,8 +127,6 @@ static void cris_init_libfuncs (void); static reg_class_t cris_preferred_reload_class (rtx, reg_class_t); -static bool cris_legitimate_address_p (enum machine_mode, rtx, bool); - static int cris_register_move_cost (enum machine_mode, reg_class_t, reg_class_t); static int cris_memory_move_cost (enum machine_mode, reg_class_t, bool); static bool cris_rtx_costs (rtx, int, int, int, int *, bool); @@ -1414,7 +1412,7 @@ cris_biap_index_p (const_rtx x, bool strict) here (but is thankfully a general_operand in itself). A local PIC symbol is valid for the plain "symbol + offset" case. */ -static bool +bool cris_legitimate_address_p (enum machine_mode mode, rtx x, bool strict) { const_rtx x1, x2; diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index d5cf85e4ba5..0ed4ced31a3 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -778,6 +778,9 @@ struct cum_args {int regs;}; #define HAVE_POST_INCREMENT 1 +#define CONSTANT_ADDRESS_P(X) \ + (CONSTANT_P (X) && cris_legitimate_address_p (QImode, X, false)) + /* Must be a compile-time constant, so we go with the highest value among all CRIS variants. */ #define MAX_REGS_PER_ADDRESS 2