From 91cbbfbad0955b5249995cc6cdf1c0d8395ca7e6 Mon Sep 17 00:00:00 2001 From: Serge Vakulenko Date: Thu, 29 Oct 2015 19:01:19 -0700 Subject: [PATCH] Virtualmips: SC instruction should take AdES exception even when LL bit is not set. --- tools/virtualmips/mips_memory.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tools/virtualmips/mips_memory.c b/tools/virtualmips/mips_memory.c index 0747de7..93911ff 100644 --- a/tools/virtualmips/mips_memory.c +++ b/tools/virtualmips/mips_memory.c @@ -1032,13 +1032,14 @@ u_int fastcall mips_mts32_sc (cpu_mips_t * cpu, m_va_t vaddr, u_int reg) u_int exc = 0; m_uint8_t has_set_value = FALSE; + data = cpu->gpr[reg] & 0xffffffff; + haddr = + mips_mts32_access (cpu, vaddr, MIPS_MEMOP_SC, 4, MTS_WRITE, &data, + &exc, &has_set_value, 0); + if (exc) + return exc; + if (cpu->ll_bit) { - data = cpu->gpr[reg] & 0xffffffff; - haddr = - mips_mts32_access (cpu, vaddr, MIPS_MEMOP_SC, 4, MTS_WRITE, &data, - &exc, &has_set_value, 0); - if (exc) - return exc; if ((haddr == NULL) && (has_set_value == FALSE)) { bad_memory_access (cpu, vaddr); }