Commit 93147119 by Bernd Schmidt Committed by Bernd Schmidt

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
parent d6f6753e
...@@ -12,6 +12,19 @@ ...@@ -12,6 +12,19 @@
functions. functions.
(TARGET_CANNOT_FORCE_CONST_MEM): New macro. (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> 2006-11-19 Andrew Pinski <pinskia@gmail.com>
PR rtl-opt/29879 PR rtl-opt/29879
......
...@@ -948,6 +948,7 @@ bfin_expand_prologue (void) ...@@ -948,6 +948,7 @@ bfin_expand_prologue (void)
do_link (spreg, frame_size, false); do_link (spreg, frame_size, false);
if (TARGET_ID_SHARED_LIBRARY if (TARGET_ID_SHARED_LIBRARY
&& !TARGET_SEP_DATA
&& (current_function_uses_pic_offset_table && (current_function_uses_pic_offset_table
|| !current_function_is_leaf)) || !current_function_is_leaf))
bfin_load_pic_reg (pic_offset_table_rtx); 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) ...@@ -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) else if ((!register_no_elim_operand (callee, Pmode)
&& GET_CODE (callee) != SYMBOL_REF) && GET_CODE (callee) != SYMBOL_REF)
|| (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))))) || bfin_longcall_p (callee, INTVAL (cookie)))))
{ {
callee = copy_to_mode_reg (Pmode, callee); callee = copy_to_mode_reg (Pmode, callee);
...@@ -2007,6 +2008,14 @@ override_options (void) ...@@ -2007,6 +2008,14 @@ override_options (void)
if (TARGET_ID_SHARED_LIBRARY && TARGET_FDPIC) if (TARGET_ID_SHARED_LIBRARY && TARGET_FDPIC)
error ("ID shared libraries and FD-PIC mode can't be used together."); 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 /* There is no single unaligned SI op for PIC code. Sometimes we
need to use ".4byte" and sometimes we need to use ".picptr". need to use ".4byte" and sometimes we need to use ".picptr".
See bfin_assemble_integer for details. */ See bfin_assemble_integer for details. */
......
...@@ -51,6 +51,7 @@ extern int target_flags; ...@@ -51,6 +51,7 @@ extern int target_flags;
#endif #endif
#define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS "\ #define DRIVER_SELF_SPECS SUBTARGET_DRIVER_SELF_SPECS "\
%{mleaf-id-shared-library:%{!mid-shared-library:-mid-shared-library}} \
%{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\ %{mfdpic:%{!fpic:%{!fpie:%{!fPIC:%{!fPIE:\
%{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fpie}}}}}}}}} \ %{!fno-pic:%{!fno-pie:%{!fno-PIC:%{!fno-PIE:-fpie}}}}}}}}} \
" "
......
...@@ -1771,7 +1771,7 @@ ...@@ -1771,7 +1771,7 @@
(match_operand 1 "general_operand" "g")) (match_operand 1 "general_operand" "g"))
(use (match_operand 2 "" ""))] (use (match_operand 2 "" ""))]
"! SIBLING_CALL_P (insn) "! SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF && GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))" && !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
"call %0;" "call %0;"
...@@ -1784,7 +1784,7 @@ ...@@ -1784,7 +1784,7 @@
(use (match_operand 2 "" "")) (use (match_operand 2 "" ""))
(return)] (return)]
"SIBLING_CALL_P (insn) "SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[0]) == SYMBOL_REF && GET_CODE (operands[0]) == SYMBOL_REF
&& !bfin_longcall_p (operands[0], INTVAL (operands[2]))" && !bfin_longcall_p (operands[0], INTVAL (operands[2]))"
"jump.l %0;" "jump.l %0;"
...@@ -1797,7 +1797,7 @@ ...@@ -1797,7 +1797,7 @@
(match_operand 2 "general_operand" "g"))) (match_operand 2 "general_operand" "g")))
(use (match_operand 3 "" ""))] (use (match_operand 3 "" ""))]
"! SIBLING_CALL_P (insn) "! SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF && GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))" && !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
"call %1;" "call %1;"
...@@ -1811,7 +1811,7 @@ ...@@ -1811,7 +1811,7 @@
(use (match_operand 3 "" "")) (use (match_operand 3 "" ""))
(return)] (return)]
"SIBLING_CALL_P (insn) "SIBLING_CALL_P (insn)
&& !TARGET_ID_SHARED_LIBRARY && (!TARGET_ID_SHARED_LIBRARY || TARGET_LEAF_ID_SHARED_LIBRARY)
&& GET_CODE (operands[1]) == SYMBOL_REF && GET_CODE (operands[1]) == SYMBOL_REF
&& !bfin_longcall_p (operands[1], INTVAL (operands[3]))" && !bfin_longcall_p (operands[1], INTVAL (operands[3]))"
"jump.l %1;" "jump.l %1;"
......
...@@ -40,10 +40,19 @@ mid-shared-library ...@@ -40,10 +40,19 @@ mid-shared-library
Target Report Mask(ID_SHARED_LIBRARY) Target Report Mask(ID_SHARED_LIBRARY)
Enabled ID based 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= mshared-library-id=
Target RejectNegative Joined UInteger Var(bfin_library_id) Target RejectNegative Joined UInteger Var(bfin_library_id)
ID of shared library to build ID of shared library to build
msep-data
Target Report Mask(SEP_DATA)
Enable separate data segment
mlong-calls mlong-calls
Target Report Mask(LONG_CALLS) Target Report Mask(LONG_CALLS)
Avoid generating pc-relative calls; use indirection Avoid generating pc-relative calls; use indirection
......
...@@ -22,10 +22,12 @@ GCC_CFLAGS += -N ...@@ -22,10 +22,12 @@ GCC_CFLAGS += -N
CRTSTUFF_T_CFLAGS = -fpic CRTSTUFF_T_CFLAGS = -fpic
TARGET_LIBGCC2_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_DEFAULTS=
MULTILIB_DIRNAMES= 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. # Assemble startup files.
$(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES) $(T)crti.o: $(srcdir)/config/bfin/crti.s $(GCC_PASSES)
......
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