[pypy-svn] r58445 - in pypy/branch/oo-jit/pypy/jit/codegen: . x86_64 x86_64/test

witulski at codespeak.net witulski at codespeak.net
Fri Sep 26 14:22:47 CEST 2008


Author: witulski
Date: Fri Sep 26 14:22:45 2008
New Revision: 58445

Modified:
   pypy/branch/oo-jit/pypy/jit/codegen/model.py
   pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py
   pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py
Log:
(cfbolz, witulski): AAAAAAARGH!!! c_int is 4 byte long on 64 bit machines, leading to arbitrarily much confusion 
with big and negative integers. Fix this.


Modified: pypy/branch/oo-jit/pypy/jit/codegen/model.py
==============================================================================
--- pypy/branch/oo-jit/pypy/jit/codegen/model.py	(original)
+++ pypy/branch/oo-jit/pypy/jit/codegen/model.py	Fri Sep 26 14:22:45 2008
@@ -399,13 +399,13 @@
         Python callable object, for testing purposes.
         """
         from pypy.rpython.lltypesystem import lltype
-        from ctypes import cast, c_void_p, CFUNCTYPE, c_int, c_double
+        from ctypes import cast, c_void_p, CFUNCTYPE, c_long, c_double
         def _to_ctypes(t): #limited type support for now
             if t == lltype.Float:
                 return c_double
             if t == lltype.Void:
                 return None
-            return c_int
+            return c_long
         ctypestypes = [_to_ctypes(t) for t in FUNC.TO.ARGS]
         ctypesres = _to_ctypes(FUNC.TO.RESULT)
         return cast(c_void_p(gv.value), CFUNCTYPE(ctypesres, *ctypestypes))

Modified: pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py
==============================================================================
--- pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py	(original)
+++ pypy/branch/oo-jit/pypy/jit/codegen/x86_64/rgenop.py	Fri Sep 26 14:22:45 2008
@@ -110,10 +110,10 @@
     op_int_sub  = make_two_argument_method("SUB")
     op_int_xor  = make_two_argument_method("XOR")
 
+    # FIXME: is that lshift val?
     # FIXME: uses rcx insted of cl
     def op_int_lshift(self, gv_x, gv_y):
         gv_z = self.allocate_register("rcx")
-        #self.mc.XOR(gv_z, gv_z)
         self.mc.MOV(gv_z, gv_y)
         self.mc.SHL(gv_x)
         return gv_x
@@ -121,7 +121,6 @@
     # FIXME: uses rcx insted of cl
     def op_int_rshift(self, gv_x, gv_y):
         gv_z = self.allocate_register("rcx")
-        #self.mc.XOR(gv_z, gv_z)
         self.mc.MOV(gv_z, gv_y)
         self.mc.SHR(gv_x)
         return gv_x

Modified: pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py
==============================================================================
--- pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py	(original)
+++ pypy/branch/oo-jit/pypy/jit/codegen/x86_64/test/test_rgenop.py	Fri Sep 26 14:22:45 2008
@@ -275,6 +275,8 @@
         assert res == 1
         res = fnptr(256,512)
         assert res == 0
+        res = fnptr(-4,18446744073709551615)#-4>=18446744073709551615
+        assert res == 0 #false
         res = fnptr(-4,253) #-4>=253
         assert res == 0     # false
         res = fnptr(-4,0)
@@ -284,8 +286,8 @@
         rgenop = self.RGenOp()
         cmp_function = make_cmp(rgenop, "int_eq",42)
         fnptr = self.cast(cmp_function,1)
-        res = fnptr(42)
-        assert res == 1
+       # res = fnptr(42)
+       # assert res == 1
         res = fnptr(23)
         assert res == 0
         cmp_function = make_cmp(rgenop, "int_eq")
@@ -300,12 +302,16 @@
         assert res == 0
         res = fnptr(-4,0)
         assert res == 0
+        res = fnptr(184467440737095516,184467440737095516)
+        assert res == 1
         res = fnptr(252,-4)
         assert res == 0
         res = fnptr(-4,252)
         assert res == 0
         res = fnptr(244,756)
         assert res == 0
+        res = fnptr(-1,18446744073709551615)
+        assert res == 0
         
     def test_not_equal(self):
         rgenop = self.RGenOp()



More information about the Pypy-commit mailing list