sh-protos.h (sh_mark_label): Declare.
* config/sh/sh-protos.h (sh_mark_label): Declare. * config/sh/sh.c (sh_mark_label): New function, taken from movdi_const, but fixing the case when the address has an addend. * config/sh/sh.md (movdi_const, movdi_const_32bit): Use it. From-SVN: r59217
This commit is contained in:
parent
48f5b6723a
commit
ea4210ef82
4 changed files with 32 additions and 16 deletions
|
@ -1,3 +1,10 @@
|
|||
2002-11-18 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* config/sh/sh-protos.h (sh_mark_label): Declare.
|
||||
* config/sh/sh.c (sh_mark_label): New function, taken from
|
||||
movdi_const, but fixing the case when the address has an addend.
|
||||
* config/sh/sh.md (movdi_const, movdi_const_32bit): Use it.
|
||||
|
||||
2002-11-18 Richard Sandiford <rsandifo@redhat.com>
|
||||
|
||||
* config/sh/sh.c (pool_node): New field: part_of_sequence_p.
|
||||
|
|
|
@ -128,6 +128,7 @@ extern int sh_cfun_interrupt_handler_p PARAMS ((void));
|
|||
extern void sh_initialize_trampoline PARAMS ((rtx, rtx, rtx));
|
||||
extern enum reg_class sh_cannot_change_mode_class
|
||||
PARAMS ((enum machine_mode, enum machine_mode));
|
||||
extern void sh_mark_label PARAMS ((rtx, int));
|
||||
|
||||
#ifdef HARD_CONST
|
||||
extern void fpscr_set_from_mem PARAMS ((int, HARD_REG_SET));
|
||||
|
|
|
@ -7764,4 +7764,26 @@ sh_cannot_change_mode_class (from, to)
|
|||
return NO_REGS;
|
||||
}
|
||||
|
||||
|
||||
/* If ADDRESS refers to a CODE_LABEL, add NUSES to the number of times
|
||||
that label is used. */
|
||||
|
||||
void
|
||||
sh_mark_label (address, nuses)
|
||||
rtx address;
|
||||
int nuses;
|
||||
{
|
||||
if (GOTOFF_P (address))
|
||||
{
|
||||
/* Extract the label or symbol. */
|
||||
address = XEXP (address, 0);
|
||||
if (GET_CODE (address) == PLUS)
|
||||
address = XEXP (address, 0);
|
||||
address = XVECEXP (address, 0, 0);
|
||||
}
|
||||
if (GET_CODE (address) == LABEL_REF
|
||||
&& GET_CODE (XEXP (address, 0)) == CODE_LABEL)
|
||||
LABEL_NUSES (XEXP (address, 0)) += nuses;
|
||||
}
|
||||
|
||||
#include "gt-sh.h"
|
||||
|
|
|
@ -3867,14 +3867,7 @@
|
|||
&& MOVI_SHORI_BASE_OPERAND_P (operands[1])"
|
||||
"
|
||||
{
|
||||
if (GET_CODE (operands[1]) == LABEL_REF
|
||||
&& GET_CODE (XEXP (operands[1], 0)) == CODE_LABEL)
|
||||
LABEL_NUSES (XEXP (operands[1], 0)) += 4;
|
||||
else if (GOTOFF_P (operands[1])
|
||||
&& GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == LABEL_REF
|
||||
&& (GET_CODE (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0))
|
||||
== CODE_LABEL))
|
||||
LABEL_NUSES (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0)) += 4;
|
||||
sh_mark_label (operands[1], 4);
|
||||
}")
|
||||
|
||||
(define_expand "movdi_const_32bit"
|
||||
|
@ -3896,14 +3889,7 @@
|
|||
&& MOVI_SHORI_BASE_OPERAND_P (operands[1])"
|
||||
"
|
||||
{
|
||||
if (GET_CODE (operands[1]) == LABEL_REF
|
||||
&& GET_CODE (XEXP (operands[1], 0)) == CODE_LABEL)
|
||||
LABEL_NUSES (XEXP (operands[1], 0)) += 2;
|
||||
else if (GOTOFF_P (operands[1])
|
||||
&& GET_CODE (XVECEXP (XEXP (operands[1], 0), 0, 0)) == LABEL_REF
|
||||
&& (GET_CODE (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0))
|
||||
== CODE_LABEL))
|
||||
LABEL_NUSES (XEXP (XVECEXP (XEXP (operands[1], 0), 0, 0), 0)) += 2;
|
||||
sh_mark_label (operands[1], 2);
|
||||
}")
|
||||
|
||||
(define_expand "movdi_const_16bit"
|
||||
|
|
Loading…
Add table
Reference in a new issue