diff --git a/src/cpu/core_dyn_x86/risc_x64.h b/src/cpu/core_dyn_x86/risc_x64.h index 384cdb4d..0e18b18a 100644 --- a/src/cpu/core_dyn_x86/risc_x64.h +++ b/src/cpu/core_dyn_x86/risc_x64.h @@ -608,7 +608,8 @@ static void gen_dop_byte(DualOps op,DynReg * dr1,Bitu di1,DynReg * dr2,Bitu di2) case DOP_OR: tmp=0x0a; if ((dr1==dr2) && (di1==di2)) goto nochange; break; case DOP_TEST: tmp=0x84; goto nochange; case DOP_MOV: if ((dr1==dr2) && (di1==di2)) return; tmp=0x8a; break; - case DOP_XCHG: tmp=0x86; dr2->flags|=DYNFLG_CHANGED; break; + case DOP_XCHG: if ((dr1==dr2) && (di1==di2)) return; + tmp=0x86; dr2->flags|=DYNFLG_CHANGED; break; default: IllegalOption("gen_dop_byte"); } @@ -786,7 +787,7 @@ static void gen_dop_word(DualOps op,bool dword,DynReg * dr1,DynReg * dr2) { case DOP_OR: tmp=0x0b; if (dr1==dr2) goto nochange; break; case DOP_TEST: tmp=0x85; goto nochange; case DOP_MOV: if (dr1==dr2) return; tmp=0x8b; break; - case DOP_XCHG: + case DOP_XCHG: if (dr1==dr2) return; dr2->flags|=DYNFLG_CHANGED; if (dword && !((dr1->flags&DYNFLG_HAS8) ^ (dr2->flags&DYNFLG_HAS8))) { dr1->genreg=gr2;gr2->dynreg=dr1; diff --git a/src/cpu/core_dyn_x86/risc_x86.h b/src/cpu/core_dyn_x86/risc_x86.h index 6b1cc9ec..762fee11 100644 --- a/src/cpu/core_dyn_x86/risc_x86.h +++ b/src/cpu/core_dyn_x86/risc_x86.h @@ -340,7 +340,8 @@ static void gen_dop_byte(DualOps op,DynReg * dr1,Bit8u di1,DynReg * dr2,Bit8u di case DOP_OR: tmp=0x0a; if ((dr1==dr2) && (di1==di2)) goto nochange; break; case DOP_TEST: tmp=0x84; goto nochange; case DOP_MOV: if ((dr1==dr2) && (di1==di2)) return; tmp=0x8a; break; - case DOP_XCHG: tmp=0x86; dr2->flags|=DYNFLG_CHANGED; break; + case DOP_XCHG: if ((dr1==dr2) && (di1==di2)) return; + tmp=0x86; dr2->flags|=DYNFLG_CHANGED; break; default: IllegalOption("gen_dop_byte"); } @@ -507,7 +508,7 @@ static void gen_dop_word(DualOps op,bool dword,DynReg * dr1,DynReg * dr2) { case DOP_OR: tmp=0x0b; if (dr1==dr2) goto nochange; break; case DOP_TEST: tmp=0x85; goto nochange; case DOP_MOV: if (dr1==dr2) return; tmp=0x8b; break; - case DOP_XCHG: + case DOP_XCHG: if (dr1==dr2) return; dr2->flags|=DYNFLG_CHANGED; if (dword && !((dr1->flags&DYNFLG_HAS8) ^ (dr2->flags&DYNFLG_HAS8))) { dr1->genreg=gr2;dr1->genreg->dynreg=dr1;