[pypy-svn] r74751 - in pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86: . test
jcreigh at codespeak.net
jcreigh at codespeak.net
Tue May 25 21:35:18 CEST 2010
Author: jcreigh
Date: Tue May 25 21:35:16 2010
New Revision: 74751
Modified:
pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py
pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py
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_32_auto_encoding.py
Log:
add a few more float operations
Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/assembler.py Tue May 25 21:35:16 2010
@@ -698,16 +698,16 @@
def genop_float_neg(self, op, arglocs, resloc):
# Following what gcc does: res = x ^ 0x8000000000000000
- self.mc.XORPD(arglocs[0], self.loc_float_const_neg)
+ self.mc.XORPD_rj(arglocs[0].value, self.loc_float_const_neg)
def genop_float_abs(self, op, arglocs, resloc):
# Following what gcc does: res = x & 0x7FFFFFFFFFFFFFFF
- self.mc.ANDPD(arglocs[0], self.loc_float_const_abs)
+ self.mc.ANDPD_rj(arglocs[0].value, self.loc_float_const_abs)
def genop_guard_float_is_true(self, op, guard_op, addr, arglocs, resloc):
guard_opnum = guard_op.opnum
loc0, loc1 = arglocs
- self.mc.XORPD(loc0, loc0)
+ self.mc.XORPD_rr(loc0.value, loc0.value)
self.mc.UCOMISD(loc0, loc1)
mc = self.mc._mc
if guard_opnum == rop.GUARD_TRUE:
@@ -720,7 +720,7 @@
return self.implement_guard(addr)
def genop_float_is_true(self, op, arglocs, resloc):
- self.mc.XORPD(arglocs[0], arglocs[0])
+ self.mc.XORPD_rr(arglocs[0].value, arglocs[0].value)
self.genop_float_ne(op, arglocs, resloc)
def genop_cast_float_to_int(self, op, arglocs, resloc):
Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py (original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/regloc.py Tue May 25 21:35:16 2010
@@ -161,6 +161,7 @@
MULSD = _binaryop('MULSD')
DIVSD = _binaryop('DIVSD')
UCOMISD = _binaryop('UCOMISD')
+ CVTSI2SD = _binaryop('CVTSI2SD')
def CALL(self, loc):
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 Tue May 25 21:35:16 2010
@@ -548,6 +548,17 @@
UCOMISD_rb = xmminsn('\x66', rex_nw, '\x0F\x2E', register(1, 8), stack_bp(2))
UCOMISD_rj = xmminsn('\x66', rex_nw, '\x0F\x2E', register(1, 8), '\x05', immediate(2))
+ # Conversion
+ # FIXME: Super confusing! The source is a GPR/mem, the destination is an xmm register
+ CVTSI2SD_rr = xmminsn('\xF2', rex_nw, '\x0F\x2A', register(1, 8), register(2), '\xC0')
+ CVTSI2SD_rb = xmminsn('\xF2', rex_nw, '\x0F\x2A', register(1, 8), stack_bp(2))
+
+ # Bitwise
+ ANDPD_rj = xmminsn('\x66', rex_nw, '\x0F\x54', register(1, 8), '\x05', immediate(2))
+
+ XORPD_rr = xmminsn('\x66', rex_nw, '\x0F\x57', register(1, 8), register(2), '\xC0')
+ XORPD_rj = xmminsn('\x66', rex_nw, '\x0F\x57', register(1, 8), '\x05', immediate(2))
+
# ------------------------------------------------------------
Conditions = {
@@ -634,6 +645,10 @@
py.test.skip("DIVSD_rj unsupported")
def UCOMISD_rj(self, xmm_reg, mem_immed):
py.test.skip("UCOMISD_rj unsupported")
+ def ANDPD_rj(self, xmm_reg, mem_immed):
+ py.test.skip("ANDPD_rj unsupported")
+ def XORPD_rj(self, xmm_reg, mem_immed):
+ py.test.skip("XORPD_rj unsupported")
# ____________________________________________________________
Modified: pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86_32_auto_encoding.py
==============================================================================
--- pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86_32_auto_encoding.py (original)
+++ pypy/branch/x86-64-jit-backend/pypy/jit/backend/x86/test/test_rx86_32_auto_encoding.py Tue May 25 21:35:16 2010
@@ -225,6 +225,11 @@
if methname.startswith('SHL') or methname.startswith('SAR') or methname.startswith('SHR'):
# XXX: Would be nice to test these automatically
py.test.skip('Shifts must be tested manually')
+ if methname.startswith('CVT'):
+ # Can't test automatically right now, we don't know
+ # which register types to use
+ py.test.skip('Skipping CVT instructions for now')
+
return [args]
def get_code_checker_class(self):
More information about the Pypy-commit
mailing list