Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r74795:4e877792713b Date: 2014-12-03 12:19 +0100 http://bitbucket.org/pypy/pypy/changeset/4e877792713b/
Log: fix a bit more cleanly without writing to the stack diff --git a/rpython/jit/backend/x86/assembler.py b/rpython/jit/backend/x86/assembler.py --- a/rpython/jit/backend/x86/assembler.py +++ b/rpython/jit/backend/x86/assembler.py @@ -1152,15 +1152,15 @@ if isinstance(argloc, RegLoc): if WORD == 4 and argloc.value >= 4: # meh, can't read the lowest byte of esi or edi on 32-bit - if resloc.value < 4: + if resloc is not argloc: self.mc.MOV(resloc, argloc) argloc = resloc - else: - tmploc = RawEspLoc(0, INT) - self.mc.MOV(tmploc, argloc) - argloc = tmploc - if isinstance(argloc, RegLoc): - argloc = argloc.lowest8bits() + if resloc.value >= 4: + # still annoyed, hack needed + self.mc.SHL_ri(resloc.value, 24) + self.mc.SAR_ri(resloc.value, 24) + return + argloc = argloc.lowest8bits() self.mc.MOVSX8(resloc, argloc) elif numbytesloc.value == 2: self.mc.MOVSX16(resloc, argloc) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit