Commit caba9473 by Jeff Law

pa.h (LEGITIMIZE_ADDRESS, [...]): Emit a sequence which will cause "addil"…

pa.h (LEGITIMIZE_ADDRESS, [...]): Emit a sequence which will cause "addil" instructions to be emitted instead of...

	* pa.h (LEGITIMIZE_ADDRESS, SYMBOL_REF case): Emit a sequence
	which will cause "addil" instructions to be emitted instead of
	"ldil; add" sequences.
	* pa.h (TARGET_KERNEL): New switch "-mkernel" which forces gcc to
	avoid "ldil; add" sequences with %r27 and instead generate "addil"
	sequences.  This avoids a HPUX linker bug when compiling kernels.

From-SVN: r2297
parent 2fbd8ac7
...@@ -99,6 +99,13 @@ extern int target_flags; ...@@ -99,6 +99,13 @@ extern int target_flags;
#define TARGET_NO_BSS (target_flags & 2) #define TARGET_NO_BSS (target_flags & 2)
/* Force gcc to only use instructions which are safe when compiling kernels.
Specifically, avoid using add instructions with dp (r27) as an argument.
Use addil instructions instead. Doing so avoids a nasty bug in the
HPUX linker. When HP fixes their linker take this option out. */
#define TARGET_KERNEL (target_flags & 4)
/* Macro to define tables used to set the flags. /* Macro to define tables used to set the flags.
This is a list in braces of pairs in braces, This is a list in braces of pairs in braces,
each pair being { "NAME", VALUE } each pair being { "NAME", VALUE }
...@@ -111,6 +118,7 @@ extern int target_flags; ...@@ -111,6 +118,7 @@ extern int target_flags;
{"pa-risc-1-0", -1}, \ {"pa-risc-1-0", -1}, \
{"pa-risc-1-1", 1}, \ {"pa-risc-1-1", 1}, \
{"no-bss", 2}, \ {"no-bss", 2}, \
{"kernel", 4}, \
{ "", TARGET_DEFAULT}} { "", TARGET_DEFAULT}}
#define TARGET_DEFAULT 0 #define TARGET_DEFAULT 0
...@@ -1197,13 +1205,13 @@ extern union tree_node *current_function_decl; ...@@ -1197,13 +1205,13 @@ extern union tree_node *current_function_decl;
(X) = gen_rtx (LO_SUM, Pmode, \ (X) = gen_rtx (LO_SUM, Pmode, \
copy_to_mode_reg (Pmode, gen_rtx (HIGH, Pmode, X)), X); \ copy_to_mode_reg (Pmode, gen_rtx (HIGH, Pmode, X)), X); \
else if (GET_CODE (X) == SYMBOL_REF) \ else if (GET_CODE (X) == SYMBOL_REF) \
(X) = gen_rtx (LO_SUM, Pmode, \ { \
copy_to_mode_reg (Pmode, \ rtx temp2 = gen_reg_rtx (Pmode); \
gen_rtx (PLUS, Pmode, \ emit_insn (gen_rtx (SET, VOIDmode, temp2, \
copy_to_mode_reg (Pmode,\ gen_rtx (PLUS, Pmode, gen_rtx (REG, Pmode, 27),\
gen_rtx (HIGH, Pmode, X)),\ gen_rtx (HIGH, Pmode, X)))); \
gen_rtx (REG, Pmode, 27))),\ (X) = gen_rtx (LO_SUM, Pmode, temp2, X); \
X); \ } \
if (memory_address_p (MODE, X)) \ if (memory_address_p (MODE, X)) \
goto WIN;} goto WIN;}
......
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