bfin.md (call_symbol, [...]): Allow these patterns if TARGET_LEAF_ID_SHARED_LIBRARY.

* config/bfin/bfin.md (call_symbol, call_value_symbol, sibcall_symbol,
	sibcall_value_symbol): Allow these patterns if
	TARGET_LEAF_ID_SHARED_LIBRARY.
	* config/bfin/bfin.c (bfin_expand_call): Allow them here as well.
	(override_options): Turn on id shared library flags if -msep-data,
	but disallow the combination of these options on the command line.
	* config/bfin/bfin.h (TARGET_LEAF_ID_SHARED_LIBRARY, MASK_SEP_DATA
	MASK_LEAF_ID_SHARED_LIBRARY, TARGET_SEP_DATA): New macros.
	(DRIVER_SELF_SPECS): -mleaf-id-shared-library implies
	-mid-shared-library.
	(TARGET_SWITCHES): Add -mleaf-id-shared-library and -msep-data.
	* doc/invoke.texi (Blackfin Options): Document new switches.

From-SVN: r119012
This commit is contained in:
Bernd Schmidt 2006-11-20 12:35:47 +00:00 committed by Bernd Schmidt
parent d6f6753efe
commit 9314711904
6 changed files with 41 additions and 7 deletions

View File

@ -12,6 +12,19 @@
functions.
(TARGET_CANNOT_FORCE_CONST_MEM): New macro.
* config/bfin/bfin.md (call_symbol, call_value_symbol, sibcall_symbol,
sibcall_value_symbol): Allow these patterns if
TARGET_LEAF_ID_SHARED_LIBRARY.
* config/bfin/bfin.c (bfin_expand_call): Allow them here as well.
(override_options): Turn on id shared library flags if -msep-data,
but disallow the combination of these options on the command line.
* config/bfin/bfin.h (TARGET_LEAF_ID_SHARED_LIBRARY, MASK_SEP_DATA
MASK_LEAF_ID_SHARED_LIBRARY, TARGET_SEP_DATA): New macros.
(DRIVER_SELF_SPECS): -mleaf-id-shared-library implies
-mid-shared-library.
(TARGET_SWITCHES): Add -mleaf-id-shared-library and -msep-data.
* doc/invoke.texi (Blackfin Options): Document new switches.
2006-11-19 Andrew Pinski <pinskia@gmail.com>
PR rtl-opt/29879

View File

@ -948,6 +948,7 @@ bfin_expand_prologue (void)
do_link (spreg, frame_size, false);
if (TARGET_ID_SHARED_LIBRARY
&& !TARGET_SEP_DATA
&& (current_function_uses_pic_offset_table
|| !current_function_is_leaf))
bfin_load_pic_reg (pic_offset_table_rtx);
@ -1780,7 +1781,7 @@ bfin_expand_call (rtx retval, rtx fnaddr, rtx callarg1, rtx cookie, int sibcall)
else if ((!register_no_elim_operand (callee, Pmode)
&& GET_CODE (callee) != SYMBOL_REF)
|| (GET_CODE (callee) == SYMBOL_REF
&& (flag_pic
&& ((TARGET_ID_SHARED_LIBRARY && !TARGET_LEAF_ID_SHARED_LIBRARY)
|| bfin_longcall_p (callee, INTVAL (cookie)))))
{
callee = copy_to_mode_reg (Pmode, callee);
@ -2007,6 +2008,14 @@ override_options (void)
if (TARGET_ID_SHARED_LIBRARY && TARGET_FDPIC)
error ("ID shared libraries and FD-PIC mode can't be used together.");
/* Don't allow the user to specify -mid-shared-library and -msep-data
together, as it makes little sense from a user's point of view... */
if (TARGET_SEP_DATA && TARGET_ID_SHARED_LIBRARY)
error ("cannot specify both -msep-data and -mid-shared-library");
/* ... internally, however, it's nearly the same. */
if (TARGET_SEP_DATA)
target_flags |= MASK_ID_SHARED_LIBRARY | MASK_LEAF_ID_SHARED_LIBRARY;
/* There is no single unaligned SI op for PIC code. Sometimes we
need to use ".4byte" and sometimes we need to use ".picptr".
See bfin_assemble_integer for details. */

View File

@ -51,6 +51,7 @@ extern int target_flags;
#endif
#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS "\
%{mleaf-id-shared-library:%{!mid-shared-library:-mid-shared-library}} \
%{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\
%{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fpie}}}}}}}}} \
"

View File

@ -1771,7 +1771,7 @@
(match_operand 1 "general_operand" "g"))
(use (match_operand 2 "" ""))]
"! SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY
&& (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
"call %0;"
@ -1784,7 +1784,7 @@
(use (match_operand 2 "" ""))
(return)]
"SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY
&& (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
"jump.l %0;"
@ -1797,7 +1797,7 @@
(match_operand 2 "general_operand" "g")))
(use (match_operand 3 "" ""))]
"! SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY
&& (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
"call %1;"
@ -1811,7 +1811,7 @@
(use (match_operand 3 "" ""))
(return)]
"SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY
&& (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
"jump.l %1;"

View File

@ -40,10 +40,19 @@ mid-shared-library
Target Report Mask(ID_SHARED_LIBRARY)
Enabled ID based shared library
mleaf-id-shared-library
Target Report Mask(LEAF_ID_SHARED_LIBRARY)
Generate code that won't be linked against any other ID shared libraries,
but may be used as a shared library.
mshared-library-id=
Target RejectNegative Joined UInteger Var(bfin_library_id)
ID of shared library to build
msep-data
Target Report Mask(SEP_DATA)
Enable separate data segment
mlong-calls
Target Report Mask(LONG_CALLS)
Avoid generating pc-relative calls; use indirection

View File

@ -22,10 +22,12 @@ GCC_CFLAGS += -N
CRTSTUFF_T_CFLAGS = -fpic
TARGET_LIBGCC2_CFLAGS = -fpic
MULTILIB_OPTIONS=mid-shared-library mfdpic
MULTILIB_OPTIONS=mid-shared-library mleaf-id-shared-library
MULTILIB_OPTIONS+=msep-data mfdpic
MULTILIB_DEFAULTS=
MULTILIB_DIRNAMES=
MULTILIB_EXCEPTIONS=mid-shared-library/mfdpic
MULTILIB_EXCEPTIONS=mid-shared-library*/mfdpic mleaf-id-shared-library*
MULTILIB_EXCEPTIONS+=*msep-data*
# Assemble startup files.
$(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES)