Commit 4e7edcca by Richard Sandiford

re PR target/14599 (ieee/20000320-1.c fails for -mips16 using -O2 and above)

	PR target/14599
	* config/mips/mips.md (UNSPEC_GP): New constant.
	* config/mips/mips.c (CONST_GP_P): Expect the CONST to contain
	an UNSPEC instead of (reg $gp).
	(mips16_gp_pseudo_reg): Change accordingly.
	(print_operand): Print $gp directly when handling CONST_GP_P.

From-SVN: r79527
parent 3704aae9
2004-03-16 Richard Zidlicky <rz@linux-m68k.org> 2004-03-16 Richard Sandiford <rsandifo@redhat.com>
PR target/14599
* config/mips/mips.md (UNSPEC_GP): New constant.
* config/mips/mips.c (CONST_GP_P): Expect the CONST to contain
an UNSPEC instead of (reg $gp).
(mips16_gp_pseudo_reg): Change accordingly.
(print_operand): Print $gp directly when handling CONST_GP_P.
2004-03-16 Richard Zidlicky <rz@linux-m68k.org>
* config.gcc, config/m68k/linux.h: Implement with-cpu for m68k-linux. * config.gcc, config/m68k/linux.h: Implement with-cpu for m68k-linux.
* longlong.h: Make code 68060 clean when compiling for m68060. * longlong.h: Make code 68060 clean when compiling for m68060.
2004-03-16 Richard Zidlicky <rz@linux-m68k.org> 2004-03-16 Richard Zidlicky <rz@linux-m68k.org>
* config/m68k/m68k.md: Fix constraints for bitfield instructions. * config/m68k/m68k.md: Fix constraints for bitfield instructions.
* doc/md.texi: Clarify description of "i" constraint. * doc/md.texi: Clarify description of "i" constraint.
......
...@@ -87,10 +87,12 @@ enum internal_test { ...@@ -87,10 +87,12 @@ enum internal_test {
#define UNSPEC_ADDRESS_TYPE(X) \ #define UNSPEC_ADDRESS_TYPE(X) \
((enum mips_symbol_type) (XINT (X, 1) - UNSPEC_ADDRESS_FIRST)) ((enum mips_symbol_type) (XINT (X, 1) - UNSPEC_ADDRESS_FIRST))
/* True if X is (const $gp). This is used to initialize the mips16 /* True if X is (const (unspec [(const_int 0)] UNSPEC_GP)). This is used
gp pseudo register. */ to initialize the mips16 gp pseudo register. */
#define CONST_GP_P(X) \ #define CONST_GP_P(X) \
(GET_CODE (X) == CONST && XEXP (X, 0) == pic_offset_table_rtx) (GET_CODE (X) == CONST \
&& GET_CODE (XEXP (X, 0)) == UNSPEC \
&& XINT (XEXP (X, 0), 1) == UNSPEC_GP)
/* The maximum distance between the top of the stack frame and the /* The maximum distance between the top of the stack frame and the
value $sp has when we save & restore registers. value $sp has when we save & restore registers.
...@@ -5564,7 +5566,7 @@ print_operand (FILE *file, rtx op, int letter) ...@@ -5564,7 +5566,7 @@ print_operand (FILE *file, rtx op, int letter)
fputs (code == EQ ? "t" : "f", file); fputs (code == EQ ? "t" : "f", file);
else if (CONST_GP_P (op)) else if (CONST_GP_P (op))
print_operand (file, XEXP (op, 0), letter); fputs (reg_names[GLOBAL_POINTER_REGNUM], file);
else else
output_addr_const (file, op); output_addr_const (file, op);
...@@ -7799,7 +7801,7 @@ mips16_gp_pseudo_reg (void) ...@@ -7799,7 +7801,7 @@ mips16_gp_pseudo_reg (void)
{ {
if (cfun->machine->mips16_gp_pseudo_rtx == NULL_RTX) if (cfun->machine->mips16_gp_pseudo_rtx == NULL_RTX)
{ {
rtx const_gp; rtx unspec;
rtx insn, scan; rtx insn, scan;
cfun->machine->mips16_gp_pseudo_rtx = gen_reg_rtx (Pmode); cfun->machine->mips16_gp_pseudo_rtx = gen_reg_rtx (Pmode);
...@@ -7807,10 +7809,10 @@ mips16_gp_pseudo_reg (void) ...@@ -7807,10 +7809,10 @@ mips16_gp_pseudo_reg (void)
/* We want to initialize this to a value which gcc will believe /* We want to initialize this to a value which gcc will believe
is constant. */ is constant. */
const_gp = gen_rtx_CONST (Pmode, pic_offset_table_rtx);
start_sequence (); start_sequence ();
unspec = gen_rtx_UNSPEC (VOIDmode, gen_rtvec (1, const0_rtx), UNSPEC_GP);
emit_move_insn (cfun->machine->mips16_gp_pseudo_rtx, emit_move_insn (cfun->machine->mips16_gp_pseudo_rtx,
const_gp); gen_rtx_CONST (Pmode, unspec));
insn = get_insns (); insn = get_insns ();
end_sequence (); end_sequence ();
......
...@@ -56,6 +56,7 @@ ...@@ -56,6 +56,7 @@
(UNSPEC_LOADGP 26) (UNSPEC_LOADGP 26)
(UNSPEC_LOAD_CALL 27) (UNSPEC_LOAD_CALL 27)
(UNSPEC_LOAD_GOT 28) (UNSPEC_LOAD_GOT 28)
(UNSPEC_GP 29)
(UNSPEC_ADDRESS_FIRST 100) (UNSPEC_ADDRESS_FIRST 100)
......
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