diff options
author | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-29 14:35:38 +0000 |
---|---|---|
committer | amylaar <amylaar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-29 14:35:38 +0000 |
commit | bc3f5c21c4b87d6eb6ce84bac3375b25c00aa21c (patch) | |
tree | 9d3229cf46e48931958d6855a1294bbe34707735 /gcc | |
parent | 179848c3b744fff8e719ccfaf387356872ac965c (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config/sh/sh.c | 3 | ||||
-rw-r--r-- | gcc/config/sh/sh.md | 4 | ||||
-rw-r--r-- | gcc/config/sh/sh.opt | 6 | ||||
-rw-r--r-- | gcc/config/sh/t-sh | 1 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 22 |
6 files changed, 40 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 728fc0aa4ed..d4e291ce407 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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, 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. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e606366ef1d..36da6d571f0 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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} |