diff --git a/ChangeLog b/ChangeLog index 9b6879c56..5cfff6874 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-03-08 Paolo Bonzini + + * lightning/i386/core-32.h: Fix stxr_c(_EAX, _EBX, _ESI). + 2008-02-13 Paolo Bonzini * lightning/i386/asm-32.h: Avoid redefinition of _r1, reported by diff --git a/lightning/i386/core-32.h b/lightning/i386/core-32.h index 48153e6df..09e7f5ff0 100644 --- a/lightning/i386/core-32.h +++ b/lightning/i386/core-32.h @@ -117,7 +117,12 @@ struct jit_local_state { #define jit_movbrm(rs, dd, db, di, ds) \ (jit_check8(rs) \ ? MOVBrm(jit_reg8(rs), dd, db, di, ds) \ - : jit_replace(_EBX, rs, _EAX, MOVBrm(_AL, dd, db, di, ds))) + : jit_replace(_EBX, rs, \ + ((dd != _EAX && db != _EAX) ? _EAX : \ + ((dd != _ECX && db != _ECX) ? _ECX : _EDX)), \ + MOVBrm(((dd != _EAX && db != _EAX) ? _AL : \ + ((dd != _ECX && db != _ECX) ? _CL : _DL)), \ + dd, db, di, ds))) #define jit_ldi_c(d, is) MOVSBLmr((is), 0, 0, 0, (d)) #define jit_ldxi_c(d, rs, is) MOVSBLmr((is), (rs), 0, 0, (d))