summaryrefslogtreecommitdiff
path: root/gcc/config/sh
diff options
context:
space:
mode:
authoramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-29 14:35:38 +0000
committeramylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-29 14:35:38 +0000
commitbc3f5c21c4b87d6eb6ce84bac3375b25c00aa21c (patch)
tree9d3229cf46e48931958d6855a1294bbe34707735 /gcc/config/sh
parent179848c3b744fff8e719ccfaf387356872ac965c (diff)
downloadgcc-bc3f5c21c4b87d6eb6ce84bac3375b25c00aa21c.tar.gz
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119314 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/sh')
-rw-r--r--gcc/config/sh/sh.c3
-rw-r--r--gcc/config/sh/sh.md4
-rw-r--r--gcc/config/sh/sh.opt6
-rw-r--r--gcc/config/sh/t-sh1
4 files changed, 10 insertions, 4 deletions
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index bc3a7b7fbbb..aead612187d 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -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);
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index ab9a3b4d606..e6d80300cdd 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -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")])
diff --git a/gcc/config/sh/sh.opt b/gcc/config/sh/sh.opt
index 161fdd8dcaf..d03dcf2f828 100644
--- a/gcc/config/sh/sh.opt
+++ b/gcc/config/sh/sh.opt
@@ -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.
diff --git a/gcc/config/sh/t-sh b/gcc/config/sh/t-sh
index 56b6ba1c55a..4f9934b27cc 100644
--- a/gcc/config/sh/t-sh
+++ b/gcc/config/sh/t-sh
@@ -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.