diff --git a/ChangeLog b/ChangeLog index e57e59df468..a3a0df8e12d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-09-20 Richard Sandiford + + * configure.ac (mipsisa*-*-elfoabi*): New stanza. + * configure: Regenerate. + 2007-09-20 Paul Jarc PR bootstrap/31906 diff --git a/config/ChangeLog b/config/ChangeLog index faf4d3c871b..868e0e86aad 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,7 @@ +2007-09-20 Richard Sandiford + + * mt-mips-elfoabi: New file. + 2007-09-07 Richard Sandiford * mt-sde (CFLAGS_FOR_TARGET): Add -mno-gpopt. diff --git a/config/mt-mips-elfoabi b/config/mt-mips-elfoabi new file mode 100644 index 00000000000..49c8ecd32ba --- /dev/null +++ b/config/mt-mips-elfoabi @@ -0,0 +1,6 @@ +# The *-elfoabi configurations are intended to be usable for both +# MIPS16 and non-MIPS16 code, but the libraries are all non-MIPS16. +# Add -minterlink-mips16 so that the libraries can be used with both +# ISA modes. +CFLAGS_FOR_TARGET = -minterlink-mips16 +CXXFLAGS_FOR_TARGET = -minterlink-mips16 diff --git a/configure b/configure index 4e7747df4a7..eca027f19e3 100755 --- a/configure +++ b/configure @@ -5279,6 +5279,9 @@ case "${target}" in mips*-sde-elf*) target_makefile_frag="config/mt-sde" ;; + mipsisa*-*-elfoabi*) + target_makefile_frag="config/mt-mips-elfoabi" + ;; *-*-netware*) target_makefile_frag="config/mt-netware" ;; diff --git a/configure.ac b/configure.ac index 6e490fc3f47..1496347d86a 100644 --- a/configure.ac +++ b/configure.ac @@ -1798,6 +1798,9 @@ case "${target}" in mips*-sde-elf*) target_makefile_frag="config/mt-sde" ;; + mipsisa*-*-elfoabi*) + target_makefile_frag="config/mt-mips-elfoabi" + ;; *-*-netware*) target_makefile_frag="config/mt-netware" ;; diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a3854f34ea6..72df51a9fdf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-09-20 Richard Sandiford + + * doc/invoke.texi (-minterlink-mips16): Document. + * config/mips/mips.opt (minterlink-mips16): New option. + * config/mips/mips.c (mips_function_ok_for_sibcall): Handle + -minterlink-mips16 + 2007-09-20 Joseph Myers * doc/extend.texi (Attribute Syntax): Remove old speculative diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index 7f959f41a21..f2c8ba9fb83 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -4256,6 +4256,17 @@ mips_function_ok_for_sibcall (tree decl, tree exp ATTRIBUTE_UNUSED) if (mips_use_mips16_mode_p (decl)) return false; + /* ...and when -minterlink-mips16 is in effect, assume that external + functions could be MIPS16 ones unless an attribute explicitly + tells us otherwise. We only care about cases where the sibling + and normal calls would both be direct. */ + if (TARGET_INTERLINK_MIPS16 + && decl + && DECL_EXTERNAL (decl) + && !mips_nomips16_decl_p (decl) + && const_call_insn_operand (XEXP (DECL_RTL (decl), 0), VOIDmode)) + return false; + /* Otherwise OK. */ return true; } diff --git a/gcc/config/mips/mips.opt b/gcc/config/mips/mips.opt index bbbc305e39a..05aedda1428 100644 --- a/gcc/config/mips/mips.opt +++ b/gcc/config/mips/mips.opt @@ -164,6 +164,10 @@ mhard-float Target Report RejectNegative InverseMask(SOFT_FLOAT_ABI, HARD_FLOAT_ABI) Allow the use of hardware floating-point ABI and instructions +minterlink-mips16 +Target Report Var(TARGET_INTERLINK_MIPS16) Init(0) +Generate code that can be safely linked with MIPS16 code. + mips Target RejectNegative Joined -mipsN Generate code for ISA level N diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index ddd95a493d9..7f85b7e705b 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -623,6 +623,7 @@ Objective-C and Objective-C++ Dialects}. @gccoptlist{-EL -EB -march=@var{arch} -mtune=@var{arch} @gol -mips1 -mips2 -mips3 -mips4 -mips32 -mips32r2 -mips64 @gol -mips16 -mno-mips16 -mflip-mips16 @gol +-minterlink-mips16 -mno-interlink-mips16 @gol -mabi=@var{abi} -mabicalls -mno-abicalls @gol -mshared -mno-shared -mxgot -mno-xgot -mgp32 -mgp64 @gol -mfp32 -mfp64 -mhard-float -msoft-float @gol @@ -11684,6 +11685,18 @@ Generate MIPS16 code on alternating functions. This option is provided for regression testing of mixed MIPS16/non-MIPS16 code generation, and is not intended for ordinary use in compiling user code. +@item -minterlink-mips16 +@itemx -mno-interlink-mips16 +@opindex minterlink-mips16 +@opindex mno-interlink-mips16 +Require (do not require) that non-MIPS16 code be link-compatible with +MIPS16 code. + +For example, non-MIPS16 code cannot jump directly to MIPS16 code; +it must either use a call or an indirect jump. @option{-minterlink-mips16} +therefore disables direct jumps unless GCC knows that the target of the +jump is not MIPS16. + @item -mabi=32 @itemx -mabi=o64 @itemx -mabi=n32