summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2014-05-28 10:29:37 +0200
committerDaniel Hellstrom <daniel@gaisler.com>2014-12-02 13:57:15 +0100
commit6930aa7f19e4b3fd5ae6fc5178f650a706b0ffcd (patch)
treebbc28f456d5c4267ebe81c898a70c63080aadae3
parentSPARC: window overflow optimization (diff)
downloadrtems-6930aa7f19e4b3fd5ae6fc5178f650a706b0ffcd.tar.bz2
SPARC: optimize window overflow trap entry
By using a optimized trap entry we can move instructions from the window overflow function into the trap entry vector. By using the saved locals instead of g1 we don't need to save that register temporarily. Also spead out non store instructions inbetween stores to use the write buffer better.
-rw-r--r--c/src/lib/libcpu/sparc/reg_win/window.S1
1 files changed, 1 insertions, 0 deletions
diff --git a/c/src/lib/libcpu/sparc/reg_win/window.S b/c/src/lib/libcpu/sparc/reg_win/window.S
index 535dc83105..a7d6910219 100644
--- a/c/src/lib/libcpu/sparc/reg_win/window.S
+++ b/c/src/lib/libcpu/sparc/reg_win/window.S
@@ -60,6 +60,7 @@ SYM(window_overflow_trap_handler):
srl %l3, 1, %l3 ! l3 = WIM >> 1
wr %l3, %l2, %wim ! WIM = (WIM >> 1) ^
! (WIM << (Number Windows - 1))
+ ! 3 instruction delay not needed here
std %i0, [%sp + 0x20] ! save input register set
std %i2, [%sp + 0x28]
std %i4, [%sp + 0x30]