[pypy-svn] r74650 - in pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86: . test
jcreigh at codespeak.net
jcreigh at codespeak.net
Fri May 21 21:25:56 CEST 2010
Author: jcreigh
Date: Fri May 21 21:25:54 2010
New Revision: 74650
Modified:
pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/rx86.py
pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86.py
Log:
fix issues causing rx86 test failures
Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/rx86.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/rx86.py (original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/rx86.py Fri May 21 21:25:54 2010
@@ -377,8 +377,17 @@
IMUL_rr = insn(rex_w, '\x0F\xAF', register(1, 8), register(2), '\xC0')
IMUL_rb = insn(rex_w, '\x0F\xAF', register(1, 8), stack_bp(2))
- # XXX: There are more efficient encodings of small immediates
- IMUL_rri = insn(rex_w, '\x69', register(1, 8), register(2), '\xC0', immediate(3))
+ # 8-bit immediate
+ _IMUL_rri8 = insn(rex_w, '\x6B', register(1, 8), register(2), '\xC0', immediate(3, 'b'))
+ # 32-bit immediate
+ _IMUL_rri32 = insn(rex_w, '\x69', register(1, 8), register(2), '\xC0', immediate(3))
+
+ def IMUL_rri(self, reg1, reg2, immed):
+ if single_byte(immed):
+ self._IMUL_rri8(reg1, reg2, immed)
+ else:
+ assert fits_in_32bits(immed)
+ self._IMUL_rri32(reg1, reg2, immed)
def IMUL_ri(self, reg, immed):
return self.IMUL_rri(reg, reg, immed)
@@ -405,7 +414,8 @@
J_il = insn('\x0F', immediate(1,'o'), '\x80', relative(2))
SET_ir = insn('\x0F', immediate(1,'o'),'\x90', register(2), '\xC0')
- CDQ = insn(rex_w, '\x99')
+ # The 64-bit version of this, CQO, is defined in X86_64_CodeBuilder
+ CDQ = insn(rex_nw, '\x99')
# ------------------------------ SSE2 ------------------------------
@@ -462,6 +472,8 @@
self.writechar(chr((imm >> 48) & 0xFF))
self.writechar(chr((imm >> 56) & 0xFF))
+ CQO = insn(rex_w, '\x99')
+
# MOV_ri from the parent class is not wrong, but here is a better encoding
# for the common case where the immediate fits in 32 bits
_MOV_ri32 = insn(rex_w, '\xC7', register(1), '\xC0', immediate(2, 'i'))
Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86.py (original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86.py Fri May 21 21:25:54 2010
@@ -142,6 +142,10 @@
s.IMUL_rri(ebx, ecx, 0x01234567)
assert s.getvalue() == '\x69\xD9\x67\x45\x23\x01'
+ s = CodeBuilder32()
+ s.IMUL_rri(ebx, ecx, 0x2A)
+ assert s.getvalue() == '\x6B\xD9\x2A'
+
class CodeBuilder64(CodeBuilderMixin, X86_64_CodeBuilder):
pass
More information about the Pypy-commit
mailing list