From: Max Filippov Date: Sun, 19 Jul 2015 07:02:37 +0000 (+0300) Subject: target-xtensa: add window overflow check to L32E/S32E X-Git-Tag: v2.4.1~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=36e1eee7603ad1683df9446e104c6f5849d854c6;p=thirdparty%2Fqemu.git target-xtensa: add window overflow check to L32E/S32E Despite L32E and S32E primary use is for window underflow and overflow exception handlers they are just normal instructions, and thus need to check for window overflow. Cc: qemu-stable@nongnu.org Signed-off-by: Max Filippov (cherry picked from commit f822b7e497fa6a662094b491f86441015f363362) Signed-off-by: Michael Roth --- diff --git a/target-xtensa/translate.c b/target-xtensa/translate.c index f2118c24c03..7a074e0e91e 100644 --- a/target-xtensa/translate.c +++ b/target-xtensa/translate.c @@ -1943,7 +1943,8 @@ static void disas_xtensa_insn(CPUXtensaState *env, DisasContext *dc) switch (OP2) { case 0: /*L32E*/ HAS_OPTION(XTENSA_OPTION_WINDOWED_REGISTER); - if (gen_check_privilege(dc)) { + if (gen_check_privilege(dc) && + gen_window_check2(dc, RRR_S, RRR_T)) { TCGv_i32 addr = tcg_temp_new_i32(); tcg_gen_addi_i32(addr, cpu_R[RRR_S], (0xffffffc0 | (RRR_R << 2))); @@ -1954,7 +1955,8 @@ static void disas_xtensa_insn(CPUXtensaState *env, DisasContext *dc) case 4: /*S32E*/ HAS_OPTION(XTENSA_OPTION_WINDOWED_REGISTER); - if (gen_check_privilege(dc)) { + if (gen_check_privilege(dc) && + gen_window_check2(dc, RRR_S, RRR_T)) { TCGv_i32 addr = tcg_temp_new_i32(); tcg_gen_addi_i32(addr, cpu_R[RRR_S], (0xffffffc0 | (RRR_R << 2)));