sh.opt (minline-ic_invalidate): New option.

* sh.opt (minline-ic_invalidate): New option.
	(musermode): Adjust comment.
	* sh.c (sh_initialize_trampoline): Emit library call unless
	is set; if it is set, don't emit library call if we can use icbi
	instead.
	* sh.md (ic_invalidate_line, ic_invalidate_line_sh4a): Also use
	icbi for TARGET_SH4_300.
	* t-sh (LIB1ASMFUNCS_CACHE): Set.
	* doc/invoke.texi: Document -minline-ic_invalidate; Update
	-musermode documentation.

From-SVN: r119314
This commit is contained in:
J"orn Rennecke 2006-11-29 14:35:38 +00:00 committed by Joern Rennecke
parent 6db2889286
commit dc557046cf
6 changed files with 40 additions and 9 deletions

View File

@ -1,3 +1,16 @@
2006-11-29 J"orn Rennecke <joern.rennecke@st.com>
* sh.opt (minline-ic_invalidate): New option.
(musermode): Adjust comment.
* sh.c (sh_initialize_trampoline): Emit library call unless
is set; if it is set, don't emit library call if we can use icbi
instead.
* sh.md (ic_invalidate_line, ic_invalidate_line_sh4a): Also use
icbi for TARGET_SH4_300.
* t-sh (LIB1ASMFUNCS_CACHE): Set.
* doc/invoke.texi: Document -minline-ic_invalidate; Update
-musermode documentation.
2006-11-29 Jim Tison <jtison@us.ibm.com>
* gthr-tpf.h (__GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION,

View File

@ -9597,7 +9597,8 @@ sh_initialize_trampoline (rtx tramp, rtx fnaddr, rtx cxt)
emit_move_insn (adjust_address (tramp_mem, SImode, 12), fnaddr);
if (TARGET_HARVARD)
{
if (TARGET_USERMODE)
if (!TARGET_INLINE_IC_INVALIDATE
|| !(TARGET_SH4A_ARCH || TARGET_SH4_300) && TARGET_USERMODE)
emit_library_call (function_symbol (NULL, "__ic_invalidate",
FUNCTION_ORDINARY),
0, VOIDmode, 1, tramp, SImode);

View File

@ -5153,7 +5153,7 @@ label:
emit_insn (gen_ic_invalidate_line_compact (operands[0], operands[1]));
DONE;
}
else if (TARGET_SH4A_ARCH)
else if (TARGET_SH4A_ARCH || TARGET_SH4_300)
{
emit_insn (gen_ic_invalidate_line_sh4a (operands[0]));
DONE;
@ -5181,7 +5181,7 @@ label:
(define_insn "ic_invalidate_line_sh4a"
[(unspec_volatile [(match_operand:SI 0 "register_operand" "r")]
UNSPEC_ICACHE)]
"TARGET_SH4A_ARCH"
"TARGET_SH4A_ARCH || TARGET_SH4_300"
"ocbwb\\t@%0\;synco\;icbi\\t@%0"
[(set_attr "length" "16")
(set_attr "type" "cwb")])

View File

@ -268,6 +268,10 @@ mindexed-addressing
Target Report Mask(ALLOW_INDEXED_ADDRESS) Condition(SUPPORT_ANY_SH5_32MEDIA)
Enable the use of the indexed addressing mode for SHmedia32/SHcompact
minline-ic_invalidate
Target Report Var(TARGET_INLINE_IC_INVALIDATE)
inline code to invalidate instruction cache entries after setting up nested function trampolines
minvalid-symbols
Target Report Mask(INVALID_SYMBOLS) Condition(SUPPORT_ANY_SH5)
Assume symbols might be invalid
@ -316,7 +320,7 @@ Cost to assume for a multiply insn
musermode
Target Report RejectNegative Mask(USERMODE)
Generate library function call to invalidate instruction cache entries after fixing trampoline
Don't generate privileged-mode only code; implies -mno-inline-ic_invalidate if the inline code would not work in user mode.
;; We might want to enable this by default for TARGET_HARD_SH4, because
;; zero-offset branches have zero latency. Needs some benchmarking.

View File

@ -7,6 +7,7 @@ LIB1ASMFUNCS = _ashiftrt _ashiftrt_n _ashiftlt _lshiftrt _movmem \
_movmem_i4 _mulsi3 _sdivsi3 _sdivsi3_i4 _udivsi3 _udivsi3_i4 _set_fpscr \
_div_table _udiv_qrnnd_16 \
$(LIB1ASMFUNCS_CACHE)
LIB1ASMFUNCS_CACHE = _ic_invalidate _ic_invalidate_array
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.

View File

@ -709,7 +709,7 @@ See RS/6000 and PowerPC Options.
-m5-compact -m5-compact-nofpu @gol
-mb -ml -mdalign -mrelax @gol
-mbigtable -mfmovd -mhitachi -mrenesas -mno-renesas -mnomacsave @gol
-mieee -misize -mpadstruct -mspace @gol
-mieee -misize -minline-ic_invalidate -mpadstruct -mspace @gol
-mprefergot -musermode -multcost=@var{number} -mdiv=@var{strategy} @gol
-mdivsi3_libfunc=@var{name} @gol
-madjust-unroll -mindexed-addressing -mgettrcost=@var{number} -mpt-fixed @gol
@ -12458,6 +12458,19 @@ comparisons of NANs / infinities incurs extra overhead in every
floating point comparison, therefore the default is set to
@option{-ffinite-math-only}.
@item -minline-ic_invalidate
@opindex minline-ic_invalidate
Inline code to invalidate instruction cache entries after setting up
nested function trampolines.
This option has no effect if -musermode is in effect and the selected
code generation option (e.g. -m4) does not allow the use of the icbi
instruction.
If the selected code generation option does not allow the use of the icbi
instruction, and -musermode is not in effect, the inlined code will
manipulate the instruction cache address array directly with an associative
write. This not only requires privileged mode, but it will also
fail if the cache line had been mapped via the TLB and has become unmapped.
@item -misize
@opindex misize
Dump instruction size and location in the assembly code.
@ -12478,10 +12491,9 @@ the Global Offset Table instead of the Procedure Linkage Table.
@item -musermode
@opindex musermode
Generate a library function call to invalidate instruction cache
entries, after fixing up a trampoline. This library function call
doesn't assume it can write to the whole memory address space. This
is the default when the target is @code{sh-*-linux*}.
Don't generate privileged mode only code; implies -mno-inline-ic_invalidate
if the inlined code would not work in user mode.
This is the default when the target is @code{sh-*-linux*}.
@item -multcost=@var{number}
@opindex multcost=@var{number}