From 34d46ecd7f8e35a2345c29ee657d6b780b11a046 Mon Sep 17 00:00:00 2001 From: krcroft Date: Sat, 11 Apr 2020 13:43:06 -0700 Subject: [PATCH] Fix alignment when incrementing values in the cache --- src/cpu/core_dyn_x86/decoder.h | 8 +++++--- src/cpu/core_dynrec/decoder_basic.h | 11 ++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/cpu/core_dyn_x86/decoder.h b/src/cpu/core_dyn_x86/decoder.h index 1dd4a19a..d294b661 100644 --- a/src/cpu/core_dyn_x86/decoder.h +++ b/src/cpu/core_dyn_x86/decoder.h @@ -199,9 +199,11 @@ static INLINE void decode_increase_wmapmask(Bitu size) { } } switch (size) { - case 1 : activecb->cache.wmapmask[mapidx]+=0x01; break; - case 2 : (*(Bit16u*)&activecb->cache.wmapmask[mapidx])+=0x0101; break; - case 4 : (*(Bit32u*)&activecb->cache.wmapmask[mapidx])+=0x01010101; break; + case 1: activecb->cache.wmapmask[mapidx] += 0x01; break; + + case 2: host_addw(activecb->cache.wmapmask + mapidx, 0x0101); break; + + case 4: host_addd(activecb->cache.wmapmask + mapidx, 0x01010101); break; } } diff --git a/src/cpu/core_dynrec/decoder_basic.h b/src/cpu/core_dynrec/decoder_basic.h index 9018e5d5..28a17923 100644 --- a/src/cpu/core_dynrec/decoder_basic.h +++ b/src/cpu/core_dynrec/decoder_basic.h @@ -294,9 +294,14 @@ static void INLINE decode_increase_wmapmask(Bitu size) { // update mask entries switch (size) { case 1 : activecb->cache.wmapmask[mapidx]+=0x01; break; - case 2 : (*(Bit16u*)&activecb->cache.wmapmask[mapidx])+=0x0101; break; - case 4 : (*(Bit32u*)&activecb->cache.wmapmask[mapidx])+=0x01010101; break; - } + case 2: + host_addw(activecb->cache.wmapmask + mapidx, 0x0101); + break; + + case 4: + host_addd(activecb->cache.wmapmask + mapidx, 0x01010101); + break; + } } // fetch a byte, val points to the code location if possible,