Author: Brian Kearns <bdkea...@gmail.com>
Branch: 
Changeset: r60598:c4d480f3bce6
Date: 2013-01-28 04:48 -0500
http://bitbucket.org/pypy/pypy/changeset/c4d480f3bce6/

Log:    merge heads

diff --git a/rpython/jit/backend/llsupport/ffisupport.py 
b/rpython/jit/backend/llsupport/ffisupport.py
--- a/rpython/jit/backend/llsupport/ffisupport.py
+++ b/rpython/jit/backend/llsupport/ffisupport.py
@@ -42,11 +42,14 @@
 
 @specialize.memo()
 def _get_ffi2descr_dict(cpu):
-    d = {('v', 0): ('v', None)}
+    def entry(letter, TYPE):
+        return (letter, cpu.arraydescrof(rffi.CArray(TYPE)), rffi.sizeof(TYPE))
+    #
+    d = {('v', 0): ('v', None, 1)}
     if cpu.supports_floats:
-        d[('f', 0)] = ('f', cpu.arraydescrof(rffi.CArray(lltype.Float)))
+        d[('f', 0)] = entry('f', lltype.Float)
     if cpu.supports_singlefloats:
-        d[('S', 0)] = ('i', cpu.arraydescrof(rffi.CArray(lltype.SingleFloat)))
+        d[('S', 0)] = entry('i', lltype.SingleFloat)
     for SIGNED_TYPE in [rffi.SIGNEDCHAR,
                         rffi.SHORT,
                         rffi.INT,
@@ -59,7 +62,7 @@
                 continue
             key = ('L', 0)
             kind = 'f'
-        d[key] = (kind, cpu.arraydescrof(rffi.CArray(SIGNED_TYPE)))
+        d[key] = entry(kind, SIGNED_TYPE)
     for UNSIGNED_TYPE in [rffi.UCHAR,
                           rffi.USHORT,
                           rffi.UINT,
@@ -68,7 +71,7 @@
         key = ('u', rffi.sizeof(UNSIGNED_TYPE))
         if key[1] > rffi.sizeof(lltype.Signed):
             continue
-        d[key] = ('i', cpu.arraydescrof(rffi.CArray(UNSIGNED_TYPE)))
+        d[key] = entry('i', UNSIGNED_TYPE)
     return d
 
 def get_arg_descr(cpu, ffi_type):
diff --git a/rpython/jit/metainterp/pyjitpl.py 
b/rpython/jit/metainterp/pyjitpl.py
--- a/rpython/jit/metainterp/pyjitpl.py
+++ b/rpython/jit/metainterp/pyjitpl.py
@@ -2567,7 +2567,8 @@
         self.history.operations.pop()
         arg_boxes = []
         for i in range(cif_description.nargs):
-            kind, descr = get_arg_descr(self.cpu, cif_description.atypes[i])
+            kind, descr, itemsize = get_arg_descr(self.cpu,
+                                                  cif_description.atypes[i])
             if kind == 'i':
                 box_arg = history.BoxInt()
             elif kind == 'f':
@@ -2576,16 +2577,14 @@
                 assert kind == 'v'
                 continue
             ofs = cif_description.exchange_args[i]
-            box_argpos = history.BoxInt()
-            self.history.record(rop.INT_ADD,
-                                [box_exchange_buffer, ConstInt(ofs)],
-                                box_argpos)
+            assert ofs % itemsize == 0     # alignment check
             self.history.record(rop.GETARRAYITEM_RAW,
-                                [box_argpos, ConstInt(0)],
+                                [box_exchange_buffer,
+                                 ConstInt(ofs // itemsize)],
                                 box_arg, descr)
             arg_boxes.append(box_arg)
         #
-        kind, descr = get_arg_descr(self.cpu, cif_description.rtype)
+        kind, descr, itemsize = get_arg_descr(self.cpu, cif_description.rtype)
         if kind == 'i':
             box_result = history.BoxInt()
         elif kind == 'f':
@@ -2601,12 +2600,10 @@
         #
         if box_result is not None:
             ofs = cif_description.exchange_result
-            box_resultpos = history.BoxInt()
-            self.history.record(rop.INT_ADD,
-                                [box_exchange_buffer, ConstInt(ofs)],
-                                box_resultpos)
+            assert ofs % itemsize == 0     # alignment check (result)
             self.history.record(rop.SETARRAYITEM_RAW,
-                                [box_resultpos, ConstInt(0), box_result],
+                                [box_exchange_buffer,
+                                 ConstInt(ofs // itemsize), box_result],
                                 None, descr)
 
     def direct_call_release_gil(self):
diff --git a/rpython/jit/metainterp/test/test_warmspot.py 
b/rpython/jit/metainterp/test/test_warmspot.py
--- a/rpython/jit/metainterp/test/test_warmspot.py
+++ b/rpython/jit/metainterp/test/test_warmspot.py
@@ -401,6 +401,7 @@
         assert len(oplabel.getarglist()) == 2     # 'n', 'res' in some order
 
     def test_inline_jit_merge_point(self):
+        py.test.skip("fix the test if you want to re-enable this")
         # test that the machinery to inline jit_merge_points in callers
         # works. The final user does not need to mess manually with the
         # _inline_jit_merge_point_ attribute and similar, it is all nicely
@@ -430,6 +431,7 @@
         self.check_resops(int_add=4)
 
     def test_jitdriver_inline(self):
+        py.test.skip("fix the test if you want to re-enable this")
         myjitdriver = JitDriver(greens = [], reds = 'auto')
         class MyRange(object):
             def __init__(self, n):
@@ -462,6 +464,7 @@
         self.check_trace_count(1)
 
     def test_jitdriver_inline_twice(self):
+        py.test.skip("fix the test if you want to re-enable this")
         myjitdriver = JitDriver(greens = [], reds = 'auto')
 
         def jit_merge_point(a, b):
@@ -492,6 +495,7 @@
         self.check_trace_count(2)
 
     def test_jitdriver_inline_exception(self):
+        py.test.skip("fix the test if you want to re-enable this")
         # this simulates what happens in a real case scenario: inside the next
         # we have a call which we cannot inline (e.g. space.next in the case
         # of W_InterpIterable), but we need to put it in a try/except block.
diff --git a/rpython/rlib/jit.py b/rpython/rlib/jit.py
--- a/rpython/rlib/jit.py
+++ b/rpython/rlib/jit.py
@@ -578,6 +578,8 @@
         pass
 
     def inline(self, call_jit_merge_point):
+        assert False, "@inline off: see skipped failures in test_warmspot."
+        #
         assert self.autoreds, "@inline works only with reds='auto'"
         self.inline_jit_merge_point = True
         def decorate(func):
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to