mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-22 00:59:55 +08:00
m68hc11.c (m68hc11_small_indexed_indirect_p): Look for reg_equiv_memory_loc when the operand is a register that does not get...
* config/m68hc11/m68hc11.c (m68hc11_small_indexed_indirect_p): Look for reg_equiv_memory_loc when the operand is a register that does not get a hard register (stack location). (tst_operand): After reload, accept all memory operand. (symbolic_memory_operand): Fix detection of symbolic references. * config/m68hc11/m68hc11.h (VALID_CONSTANT_OFFSET_P): For 68HC12 accept symbols and any constant. From-SVN: r50839
This commit is contained in:
parent
6272bc6859
commit
fdffea1abb
@ -1,3 +1,13 @@
|
|||||||
|
2002-03-15 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
||||||
|
|
||||||
|
* config/m68hc11/m68hc11.c (m68hc11_small_indexed_indirect_p): Look
|
||||||
|
for reg_equiv_memory_loc when the operand is a register that does
|
||||||
|
not get a hard register (stack location).
|
||||||
|
(tst_operand): After reload, accept all memory operand.
|
||||||
|
(symbolic_memory_operand): Fix detection of symbolic references.
|
||||||
|
* config/m68hc11/m68hc11.h (VALID_CONSTANT_OFFSET_P): For 68HC12
|
||||||
|
accept symbols and any constant.
|
||||||
|
|
||||||
2002-03-15 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
2002-03-15 Stephane Carrez <Stephane.Carrez@worldnet.fr>
|
||||||
|
|
||||||
* config/m68hc11/m68hc11.c (emit_move_after_reload): Add a REG_INC
|
* config/m68hc11/m68hc11.c (emit_move_after_reload): Add a REG_INC
|
||||||
|
@ -551,6 +551,14 @@ m68hc11_small_indexed_indirect_p (operand, mode)
|
|||||||
{
|
{
|
||||||
rtx base, offset;
|
rtx base, offset;
|
||||||
|
|
||||||
|
if (GET_CODE (operand) == REG && reload_in_progress
|
||||||
|
&& REGNO (operand) >= FIRST_PSEUDO_REGISTER
|
||||||
|
&& reg_equiv_memory_loc[REGNO (operand)])
|
||||||
|
{
|
||||||
|
operand = reg_equiv_memory_loc[REGNO (operand)];
|
||||||
|
operand = eliminate_regs (operand, 0, NULL_RTX);
|
||||||
|
}
|
||||||
|
|
||||||
if (GET_CODE (operand) != MEM)
|
if (GET_CODE (operand) != MEM)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -561,8 +569,7 @@ m68hc11_small_indexed_indirect_p (operand, mode)
|
|||||||
if (PUSH_POP_ADDRESS_P (operand))
|
if (PUSH_POP_ADDRESS_P (operand))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!register_indirect_p (operand, mode,
|
if (!register_indirect_p (operand, mode, reload_completed))
|
||||||
(reload_completed | reload_in_progress)))
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (TARGET_M6812 && GET_CODE (operand) == PLUS
|
if (TARGET_M6812 && GET_CODE (operand) == PLUS
|
||||||
@ -570,6 +577,12 @@ m68hc11_small_indexed_indirect_p (operand, mode)
|
|||||||
{
|
{
|
||||||
base = XEXP (operand, 0);
|
base = XEXP (operand, 0);
|
||||||
offset = XEXP (operand, 1);
|
offset = XEXP (operand, 1);
|
||||||
|
|
||||||
|
/* The offset can be a symbol address and this is too big
|
||||||
|
for the operand constraint. */
|
||||||
|
if (GET_CODE (base) != CONST_INT && GET_CODE (offset) != CONST_INT)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (GET_CODE (base) == CONST_INT)
|
if (GET_CODE (base) == CONST_INT)
|
||||||
offset = base;
|
offset = base;
|
||||||
|
|
||||||
@ -853,7 +866,7 @@ tst_operand (operand, mode)
|
|||||||
rtx operand;
|
rtx operand;
|
||||||
enum machine_mode mode;
|
enum machine_mode mode;
|
||||||
{
|
{
|
||||||
if (GET_CODE (operand) == MEM)
|
if (GET_CODE (operand) == MEM && reload_completed == 0)
|
||||||
{
|
{
|
||||||
rtx addr = XEXP (operand, 0);
|
rtx addr = XEXP (operand, 0);
|
||||||
if (m68hc11_auto_inc_p (addr))
|
if (m68hc11_auto_inc_p (addr))
|
||||||
@ -1010,6 +1023,7 @@ symbolic_memory_operand (op, mode)
|
|||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case CONST:
|
case CONST:
|
||||||
|
op = XEXP (op, 0);
|
||||||
return ((GET_CODE (XEXP (op, 0)) == SYMBOL_REF
|
return ((GET_CODE (XEXP (op, 0)) == SYMBOL_REF
|
||||||
|| GET_CODE (XEXP (op, 0)) == LABEL_REF)
|
|| GET_CODE (XEXP (op, 0)) == LABEL_REF)
|
||||||
&& GET_CODE (XEXP (op, 1)) == CONST_INT);
|
&& GET_CODE (XEXP (op, 1)) == CONST_INT);
|
||||||
|
@ -1275,10 +1275,14 @@ extern unsigned char m68hc11_reg_valid_for_index[FIRST_PSEUDO_REGISTER];
|
|||||||
a mode offset to access the lowest part of the data.
|
a mode offset to access the lowest part of the data.
|
||||||
(For example, for an SImode, the last valid offset is 252.) */
|
(For example, for an SImode, the last valid offset is 252.) */
|
||||||
#define VALID_CONSTANT_OFFSET_P(X,MODE) \
|
#define VALID_CONSTANT_OFFSET_P(X,MODE) \
|
||||||
((GET_CODE (X) == CONST_INT) && \
|
(((GET_CODE (X) == CONST_INT) && \
|
||||||
((INTVAL (X) >= VALID_MIN_OFFSET) \
|
((INTVAL (X) >= VALID_MIN_OFFSET) \
|
||||||
&& ((INTVAL (X) <= VALID_MAX_OFFSET \
|
&& ((INTVAL (X) <= VALID_MAX_OFFSET \
|
||||||
- (HOST_WIDE_INT) (GET_MODE_SIZE (MODE) + 1)))))
|
- (HOST_WIDE_INT) (GET_MODE_SIZE (MODE) + 1))))) \
|
||||||
|
|| (TARGET_M6812 \
|
||||||
|
&& ((GET_CODE (X) == SYMBOL_REF) \
|
||||||
|
|| GET_CODE (X) == LABEL_REF \
|
||||||
|
|| GET_CODE (X) == CONST)))
|
||||||
|
|
||||||
/* This is included to allow stack push/pop operations. Special hacks in the
|
/* This is included to allow stack push/pop operations. Special hacks in the
|
||||||
md and m6811.c files exist to support this. */
|
md and m6811.c files exist to support this. */
|
||||||
|
Loading…
Reference in New Issue
Block a user