Commit 07ee3b58 by Kazu Hirata Committed by Kazu Hirata

h8300-protos.h: Add prototypes for h8300_hard_regno_nregs and h8300_hard_regno_mode_ok.

	* config/h8300/h8300-protos.h: Add prototypes for
	h8300_hard_regno_nregs and h8300_hard_regno_mode_ok.
	* config/h8300/h8300.c (h8300_hard_regno_nregs): New.
	(h8300_hard_regno_mode_ok): Likewise.
	* config/h8300/h8300.h (HARD_REGNO_NREGS): Call
	h8300_hard_regno_nregs().
	(HARD_REGNO_MODE_OK): Call h8300_hard_regno_mode_ok().

From-SVN: r78050
parent 22234f56
2004-02-18 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300-protos.h: Add prototypes for
h8300_hard_regno_nregs and h8300_hard_regno_mode_ok.
* config/h8300/h8300.c (h8300_hard_regno_nregs): New.
(h8300_hard_regno_mode_ok): Likewise.
* config/h8300/h8300.h (HARD_REGNO_NREGS): Call
h8300_hard_regno_nregs().
(HARD_REGNO_MODE_OK): Call h8300_hard_regno_mode_ok().
2004-02-18 Per Bothner <per@bothner.com> 2004-02-18 Per Bothner <per@bothner.com>
* cpphash.h (struct cpp_buffer): Restore return_at_eof field. This * cpphash.h (struct cpp_buffer): Restore return_at_eof field. This
......
...@@ -104,6 +104,8 @@ extern int h8300_current_function_interrupt_function_p (void); ...@@ -104,6 +104,8 @@ extern int h8300_current_function_interrupt_function_p (void);
extern int h8300_initial_elimination_offset (int, int); extern int h8300_initial_elimination_offset (int, int);
extern int h8300_regs_ok_for_stm (int, rtx[]); extern int h8300_regs_ok_for_stm (int, rtx[]);
extern int h8300_hard_regno_rename_ok (unsigned int, unsigned int); extern int h8300_hard_regno_rename_ok (unsigned int, unsigned int);
extern int h8300_hard_regno_nregs (int, enum machine_mode);
extern int h8300_hard_regno_mode_ok (int, enum machine_mode);
struct cpp_reader; struct cpp_reader;
extern void h8300_pr_interrupt (struct cpp_reader *); extern void h8300_pr_interrupt (struct cpp_reader *);
......
...@@ -4706,6 +4706,32 @@ h8300_legitimate_address_p (rtx x, int strict) ...@@ -4706,6 +4706,32 @@ h8300_legitimate_address_p (rtx x, int strict)
return 0; return 0;
} }
/* Worker function for HARD_REGNO_NREGS.
We pretend the MAC register is 32bits -- we don't have any data
types on the H8 series to handle more than 32bits. */
int
h8300_hard_regno_nregs (int regno ATTRIBUTE_UNUSED, enum machine_mode mode)
{
return (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
}
/* Worker function for HARD_REGNO_MODE_OK. */
int
h8300_hard_regno_mode_ok (int regno, enum machine_mode mode)
{
if (TARGET_H8300)
/* If an even reg, then anything goes. Otherwise the mode must be
QI or HI. */
return ((regno & 1) == 0) || (mode == HImode) || (mode == QImode);
else
/* MAC register can only be of SImode. Otherwise, anything
goes. */
return regno == MAC_REG ? mode == SImode : 1;
}
/* Perform target dependent optabs initialization. */ /* Perform target dependent optabs initialization. */
static void static void
......
...@@ -316,29 +316,11 @@ extern int target_flags; ...@@ -316,29 +316,11 @@ extern int target_flags;
fixed_regs[MAC_REG] = call_used_regs[MAC_REG] = 1; \ fixed_regs[MAC_REG] = call_used_regs[MAC_REG] = 1; \
} }
/* Return number of consecutive hard regs needed starting at reg REGNO #define HARD_REGNO_NREGS(REGNO, MODE) \
to hold something of mode MODE. h8300_hard_regno_nregs ((REGNO), (MODE))
This is ordinarily the length in words of a value of mode MODE #define HARD_REGNO_MODE_OK(REGNO, MODE) \
but can be less for certain modes in special long registers. h8300_hard_regno_mode_ok ((REGNO), (MODE))
We pretend the MAC register is 32bits -- we don't have any data
types on the H8 series to handle more than 32bits. */
#define HARD_REGNO_NREGS(REGNO, MODE) \
((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
/* Value is 1 if hard register REGNO can hold a value of machine-mode
MODE.
H8/300: If an even reg, then anything goes. Otherwise the mode must be QI
or HI.
H8/300H: Anything goes. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
(TARGET_H8300 \
? ((((REGNO) & 1) == 0) || ((MODE) == HImode) || ((MODE) == QImode)) \
: (REGNO) == MAC_REG ? (MODE) == SImode : 1)
/* Value is 1 if it is a good idea to tie two pseudo registers /* Value is 1 if it is a good idea to tie two pseudo registers
when one has mode MODE1 and one has mode MODE2. when one has mode MODE1 and one has mode MODE2.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment