summaryrefslogtreecommitdiffstats
path: root/target
diff options
context:
space:
mode:
authorAurelien Jarno2017-05-01 23:20:43 +0200
committerAurelien Jarno2017-05-13 11:18:26 +0200
commita380f9db96dc94e5109611e4fd0fb4f671e30143 (patch)
tree7ef41df51ce6e938438abf473cba3865cbf6910f /target
parenttarget/sh4: optimize gen_store_fpr64 (diff)
downloadqemu-a380f9db96dc94e5109611e4fd0fb4f671e30143.tar.gz
qemu-a380f9db96dc94e5109611e4fd0fb4f671e30143.tar.xz
qemu-a380f9db96dc94e5109611e4fd0fb4f671e30143.zip
target/sh4: optimize gen_write_sr using extract op
This doesn't change the generated code on x86, but optimizes it on most RISC architectures and makes the code simpler to read. Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Diffstat (limited to 'target')
-rw-r--r--target/sh4/translate.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/target/sh4/translate.c b/target/sh4/translate.c
index fe8bff54a6..7a504a7f5a 100644
--- a/target/sh4/translate.c
+++ b/target/sh4/translate.c
@@ -204,12 +204,9 @@ static void gen_write_sr(TCGv src)
{
tcg_gen_andi_i32(cpu_sr, src,
~((1u << SR_Q) | (1u << SR_M) | (1u << SR_T)));
- tcg_gen_shri_i32(cpu_sr_q, src, SR_Q);
- tcg_gen_andi_i32(cpu_sr_q, cpu_sr_q, 1);
- tcg_gen_shri_i32(cpu_sr_m, src, SR_M);
- tcg_gen_andi_i32(cpu_sr_m, cpu_sr_m, 1);
- tcg_gen_shri_i32(cpu_sr_t, src, SR_T);
- tcg_gen_andi_i32(cpu_sr_t, cpu_sr_t, 1);
+ tcg_gen_extract_i32(cpu_sr_q, src, SR_Q, 1);
+ tcg_gen_extract_i32(cpu_sr_m, src, SR_M, 1);
+ tcg_gen_extract_i32(cpu_sr_t, src, SR_T, 1);
}
static inline void gen_save_cpu_state(DisasContext *ctx, bool save_pc)