From: Toni Wilen Date: Sun, 2 Dec 2018 12:59:25 +0000 (+0200) Subject: Store mmu030_state[1] in temporary variable because stack frame writing can modify... X-Git-Tag: 4100~9 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=0160b544ea71a41b778b6fcc60bafa8053115dc3;p=francis%2Fwinuae.git Store mmu030_state[1] in temporary variable because stack frame writing can modify it if SP is unaligned. --- diff --git a/cpummu30.cpp b/cpummu30.cpp index 94fd28be..d56c9fc3 100644 --- a/cpummu30.cpp +++ b/cpummu30.cpp @@ -1777,8 +1777,9 @@ void mmu030_page_fault(uaecptr addr, bool read, int flags, uae_u32 fc) regs.mmu_ssw |= read ? MMU030_SSW_RW : 0; regs.mmu_ssw |= flags; regs.mmu_ssw |= fc; - // store in wb3_data because stack frame creation may modify data buffer. + // temporary store in 68040+ variables because stack frame creation may modify them. regs.wb3_data = mmu030_data_buffer_out; + regs.wb2_address = mmu030_state[1]; bBusErrorReadWrite = read; mm030_stageb_address = addr; diff --git a/newcpu.cpp b/newcpu.cpp index 82246f94..d2f5ca7c 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -3235,7 +3235,7 @@ static void Exception_build_stack_frame (uae_u32 oldpc, uae_u32 currpc, uae_u32 m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), mmu030_state[2]); m68k_areg (regs, 7) -= 2; - x_put_word (m68k_areg (regs, 7), mmu030_state[1]); + x_put_word (m68k_areg(regs, 7), regs.wb2_address); // = mmu030_state[1] m68k_areg (regs, 7) -= 2; x_put_word (m68k_areg (regs, 7), mmu030_state[0]); // data input buffer = fault address