aboutsummaryrefslogtreecommitdiff
path: root/target/xtensa/helper.h
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2019-01-30 14:56:29 -0800
committerMax Filippov <jcmvbkbc@gmail.com>2019-02-28 04:43:22 -0800
commit8df3fd359697d68095c5f1ba47e83e8e237a3055 (patch)
tree09dc8ab20422770cee30babaf7caa4c4b024db26 /target/xtensa/helper.h
parent45b71a795e5add347f0ba7aba526896132e9b986 (diff)
downloadqemu-8df3fd359697d68095c5f1ba47e83e8e237a3055.zip
qemu-8df3fd359697d68095c5f1ba47e83e8e237a3055.tar.gz
qemu-8df3fd359697d68095c5f1ba47e83e8e237a3055.tar.bz2
target/xtensa: move WINDOW_BASE SR update to postprocessing
Opcodes that modify WINDOW_BASE SR don't have dependency on opcodes that use windowed registers. If such opcodes are combined in a single instruction they may not be correctly ordered. Instead of adding said dependency use temporary register to store changed WINDOW_BASE value and do actual register window rotation as a postprocessing step. Not all opcodes that change WINDOW_BASE need this: retw, rfwo and rfwu are also jump opcodes, so they are guaranteed to be translated last and thus will not affect other opcodes in the same instruction. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'target/xtensa/helper.h')
-rw-r--r--target/xtensa/helper.h3
1 files changed, 1 insertions, 2 deletions
diff --git a/target/xtensa/helper.h b/target/xtensa/helper.h
index 2a7db35..b6529a8 100644
--- a/target/xtensa/helper.h
+++ b/target/xtensa/helper.h
@@ -3,12 +3,11 @@ DEF_HELPER_3(exception_cause, noreturn, env, i32, i32)
DEF_HELPER_4(exception_cause_vaddr, noreturn, env, i32, i32, i32)
DEF_HELPER_3(debug_exception, noreturn, env, i32, i32)
-DEF_HELPER_2(wsr_windowbase, void, env, i32)
+DEF_HELPER_1(sync_windowbase, void, env)
DEF_HELPER_4(entry, void, env, i32, i32, i32)
DEF_HELPER_2(test_ill_retw, void, env, i32)
DEF_HELPER_2(test_underflow_retw, void, env, i32)
DEF_HELPER_2(retw, i32, env, i32)
-DEF_HELPER_2(rotw, void, env, i32)
DEF_HELPER_3(window_check, noreturn, env, i32, i32)
DEF_HELPER_1(restore_owb, void, env)
DEF_HELPER_2(movsp, void, env, i32)