diff options
Diffstat (limited to 'gcc/config/bfin')
-rw-r--r-- | gcc/config/bfin/bfin-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.c | 15 | ||||
-rw-r--r-- | gcc/config/bfin/bfin.h | 10 | ||||
-rw-r--r-- | gcc/config/bfin/predicates.md | 2 |
4 files changed, 14 insertions, 14 deletions
diff --git a/gcc/config/bfin/bfin-protos.h b/gcc/config/bfin/bfin-protos.h index adca6fa60fa..223646d59a0 100644 --- a/gcc/config/bfin/bfin-protos.h +++ b/gcc/config/bfin/bfin-protos.h @@ -71,7 +71,6 @@ extern char *bfin_asm_long (void); extern char *bfin_asm_short (void); extern int log2constp (unsigned HOST_WIDE_INT); -extern int hard_regno_mode_ok (int, machine_mode); extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx); extern HOST_WIDE_INT bfin_initial_elimination_offset (int, int); diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c index f04fe874777..7572527a1e5 100644 --- a/gcc/config/bfin/bfin.c +++ b/gcc/config/bfin/bfin.c @@ -2114,16 +2114,18 @@ bfin_expand_call (rtx retval, rtx fnaddr, rtx callarg1, rtx cookie, int sibcall) CALL_INSN_FUNCTION_USAGE (call) = use; } -/* Return 1 if hard register REGNO can hold a value of machine-mode MODE. */ +/* Implement TARGET_HARD_REGNO_MODE_OK. -int -hard_regno_mode_ok (int regno, machine_mode mode) + Do not allow to store a value in REG_CC for any mode. + Do not allow to store value in pregs if mode is not SI. */ +static bool +bfin_hard_regno_mode_ok (unsigned int regno, machine_mode mode) { /* Allow only dregs to store value of mode HI or QI */ enum reg_class rclass = REGNO_REG_CLASS (regno); if (mode == CCmode) - return 0; + return false; if (mode == V2HImode) return D_REGNO_P (regno); @@ -2139,7 +2141,7 @@ hard_regno_mode_ok (int regno, machine_mode mode) if (mode == SImode && TEST_HARD_REG_BIT (reg_class_contents[PROLOGUE_REGS], regno)) - return 1; + return true; return TEST_HARD_REG_BIT (reg_class_contents[MOST_REGS], regno); } @@ -5845,4 +5847,7 @@ bfin_conditional_register_usage (void) #undef TARGET_CAN_USE_DOLOOP_P #define TARGET_CAN_USE_DOLOOP_P bfin_can_use_doloop_p +#undef TARGET_HARD_REGNO_MODE_OK +#define TARGET_HARD_REGNO_MODE_OK bfin_hard_regno_mode_ok + struct gcc_target targetm = TARGET_INITIALIZER; diff --git a/gcc/config/bfin/bfin.h b/gcc/config/bfin/bfin.h index 31ea70bc598..232ce23fe0d 100644 --- a/gcc/config/bfin/bfin.h +++ b/gcc/config/bfin/bfin.h @@ -677,10 +677,6 @@ enum reg_class registers. */ #define TARGET_SMALL_REGISTER_CLASSES_FOR_MODE_P hook_bool_mode_true -/* Do not allow to store a value in REG_CC for any mode */ -/* Do not allow to store value in pregs if mode is not SI*/ -#define HARD_REGNO_MODE_OK(REGNO, MODE) hard_regno_mode_ok((REGNO), (MODE)) - /* Return the maximum number of consecutive registers needed to represent mode MODE in a register of class CLASS. */ #define CLASS_MAX_NREGS(CLASS, MODE) \ @@ -700,9 +696,9 @@ enum reg_class register allocation so as to avoid move instructions between a value of mode MODE1 and a value of mode MODE2. - If `HARD_REGNO_MODE_OK (R, MODE1)' and `HARD_REGNO_MODE_OK (R, - MODE2)' are ever different for any R, then `MODES_TIEABLE_P (MODE1, - MODE2)' must be zero. */ + If `TARGET_HARD_REGNO_MODE_OK (R, MODE1)' and + `TARGET_HARD_REGNO_MODE_OK (R, MODE2)' are ever different for any R, + then `MODES_TIEABLE_P (MODE1, MODE2)' must be zero. */ #define MODES_TIEABLE_P(MODE1, MODE2) \ ((MODE1) == (MODE2) \ || ((GET_MODE_CLASS (MODE1) == MODE_INT \ diff --git a/gcc/config/bfin/predicates.md b/gcc/config/bfin/predicates.md index 0bc21cc2ddc..7541c75ed9d 100644 --- a/gcc/config/bfin/predicates.md +++ b/gcc/config/bfin/predicates.md @@ -79,7 +79,7 @@ if (GET_CODE (op) == SUBREG) op = SUBREG_REG (op); if (REGNO (op) < FIRST_PSEUDO_REGISTER) - return HARD_REGNO_MODE_OK (REGNO (op), mode); + return targetm.hard_regno_mode_ok (REGNO (op), mode); return 1; }) |