Author: Armin Rigo <[email protected]>
Branch: cleanup-llgraph-backend
Changeset: r58155:1379a0ac0c19
Date: 2012-10-17 11:26 +0200
http://bitbucket.org/pypy/pypy/changeset/1379a0ac0c19/

Log:    work in progress, notably changing the argument order of bh_*() to
        always pass the descr last.

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -5,6 +5,7 @@
 from pypy.jit.backend.llgraph import support
 from pypy.jit.metainterp.history import Const, getkind, AbstractDescr, VOID
 from pypy.jit.metainterp.resoperation import rop
+from pypy.jit.codewriter import heaptracker
 
 from pypy.rpython.llinterp import LLInterpreter
 from pypy.rpython.lltypesystem import lltype, llmemory, rclass, rstr
@@ -22,9 +23,9 @@
         self.descr = descr
 
 class ExecutionFinished(Exception):
-    def __init__(self, descr, arg):
+    def __init__(self, descr, args):
         self.descr = descr
-        self.arg = arg
+        self.args = args
 
 class Jump(Exception):
     def __init__(self, descr, args):
@@ -36,6 +37,12 @@
         self.RESULT = RESULT
         self.ARGS = ARGS
 
+class SizeDescr(AbstractDescr):
+    def __init__(self, S):
+        self.S = S
+    def as_vtable_size_descr(self):
+        return self
+
 class FieldDescr(AbstractDescr):
     def __init__(self, S, fieldname):
         self.S = S
@@ -88,7 +95,7 @@
             frame.execute(loop.operations)
             assert False
         except ExecutionFinished, e:
-            self.latest_values = [e.arg]
+            self.latest_values = e.args
             return e.descr
         except GuardFailed, e:
             self.latest_values = e.failargs
@@ -119,6 +126,15 @@
             self.descrs[key] = descr
             return descr
 
+    def sizeof(self, S):
+        key = ('size', S)
+        try:
+            return self.descrs[key]
+        except KeyError:
+            descr = SizeDescr(S)
+            self.descrs[key] = descr
+            return descr
+
     def fielddescrof(self, S, fieldname):
         key = ('field', S, fieldname)
         try:
@@ -185,36 +201,109 @@
         res = func(*args)
         return support.cast_result(RESULT, res)
 
-    def _do_call(self, func, calldescr, args_i, args_r, args_f):
+    def _do_call(self, func, args_i, args_r, args_f, calldescr):
         TP = llmemory.cast_int_to_adr(func).ptr._obj._TYPE
         args = support.cast_call_args(TP.ARGS, args_i, args_r, args_f)
         return self.call(func, calldescr, args)
 
     bh_call_i = _do_call
+    bh_call_r = _do_call
+    bh_call_f = _do_call
+    bh_call_v = _do_call
 
-    def do_getinteriorfield_gc(self, a, index, descr):
+    def bh_getfield_gc(self, p, descr):
+        p = lltype.cast_opaque_ptr(lltype.Ptr(descr.S), p)
+        return support.cast_result(descr.FIELD, getattr(p, descr.fieldname))
+
+    bh_getfield_gc_i = bh_getfield_gc
+    bh_getfield_gc_r = bh_getfield_gc
+    bh_getfield_gc_f = bh_getfield_gc
+
+    def bh_setfield_gc(self, p, newvalue, descr):
+        p = lltype.cast_opaque_ptr(lltype.Ptr(descr.S), p)
+        setattr(p, descr.fieldname, support.cast_arg(descr.FIELD, newvalue))
+
+    bh_setfield_gc_i = bh_setfield_gc
+    bh_setfield_gc_r = bh_setfield_gc
+    bh_setfield_gc_f = bh_setfield_gc
+
+    def bh_arraylen_gc(self, a, descr):
+        array = a._obj.container
+        return array.getlength()
+
+    def bh_setarrayitem_gc(self, a, index, item, descr):
+        array = a._obj.container
+        array.setitem(index, support.cast_arg(descr.A.OF, item))
+
+    def bh_getarrayitem_gc(self, a, index, descr):
+        array = a._obj.container
+        return support.cast_result(descr.A.OF, array.getitem(index))
+
+    def bh_strlen(self, s):
+        return s._obj.container.chars.getlength()
+
+    def bh_strgetitem(self, s, item):
+        return ord(s._obj.container.chars.getitem(item))
+
+    def bh_strsetitem(self, s, item, v):
+        s._obj.container.chars.setitem(item, chr(v))
+
+    def bh_copystrcontent(self, src, dst, srcstart, dststart, length):
+        src = lltype.cast_opaque_ptr(lltype.Ptr(rstr.STR), src)
+        dst = lltype.cast_opaque_ptr(lltype.Ptr(rstr.STR), dst)
+        assert 0 <= srcstart <= srcstart + length <= len(src.chars)
+        assert 0 <= dststart <= dststart + length <= len(dst.chars)
+        rstr.copy_string_contents(src, dst, srcstart, dststart, length)
+
+    def bh_copyunicodecontent(self, src, dst, srcstart, dststart, length):
+        src = lltype.cast_opaque_ptr(lltype.Ptr(rstr.UNICODE), src)
+        dst = lltype.cast_opaque_ptr(lltype.Ptr(rstr.UNICODE), dst)
+        assert 0 <= srcstart <= srcstart + length <= len(src.chars)
+        assert 0 <= dststart <= dststart + length <= len(dst.chars)
+        rstr.copy_unicode_contents(src, dst, srcstart, dststart, length)
+
+    def bh_getinteriorfield_gc(self, a, index, descr):
         array = a._obj.container
         return support.cast_result(descr.FIELD,
                           getattr(array.getitem(index), descr.fieldname))
 
-    bh_getinteriorfield_gc_f = do_getinteriorfield_gc
-    bh_getinteriorfield_gc_i = do_getinteriorfield_gc
-    bh_getinteriorfield_gc_r = do_getinteriorfield_gc
+    bh_getinteriorfield_gc_f = bh_getinteriorfield_gc
+    bh_getinteriorfield_gc_i = bh_getinteriorfield_gc
+    bh_getinteriorfield_gc_r = bh_getinteriorfield_gc
 
-    def do_setinteriorfield_gc(self, a, index, item, descr):
+    def bh_setinteriorfield_gc(self, a, index, item, descr):
         array = a._obj.container
         setattr(array.getitem(index), descr.fieldname,
                 support.cast_arg(descr.FIELD, item))
 
-    bh_setinteriorfield_gc_f = do_setinteriorfield_gc
-    bh_setinteriorfield_gc_r = do_setinteriorfield_gc
-    bh_setinteriorfield_gc_i = do_setinteriorfield_gc
+    bh_setinteriorfield_gc_f = bh_setinteriorfield_gc
+    bh_setinteriorfield_gc_r = bh_setinteriorfield_gc
+    bh_setinteriorfield_gc_i = bh_setinteriorfield_gc
 
-    def do_newunicode(self, length):
+    def bh_newunicode(self, length):
         return lltype.cast_opaque_ptr(llmemory.GCREF,
                                       lltype.malloc(rstr.UNICODE, length))
 
-    bh_newunicode = do_newunicode
+    def bh_unicodelen(self, string):
+        return string._obj.container.chars.getlength()
+
+    def bh_unicodegetitem(self, string, index):
+        return ord(string._obj.container.chars.getitem(index))
+
+    def bh_unicodesetitem(self, string, index, newvalue):
+        string._obj.container.chars.setitem(index, unichr(newvalue))
+
+    def bh_new(self, sizedescr):
+        return lltype.cast_opaque_ptr(llmemory.GCREF,
+                                      lltype.malloc(sizedescr.S))
+
+    def bh_new_with_vtable(self, descr, vtable):
+        result = lltype.malloc(descr.S)
+        result_as_objptr = lltype.cast_pointer(rclass.OBJECTPTR, result)
+        result_as_objptr.typeptr = support.cast_from_int(rclass.CLASSTYPE,
+                                                         vtable)
+        return lltype.cast_opaque_ptr(llmemory.GCREF, result)
+
 
 class LLFrame(object):
     def __init__(self, cpu, argboxes, args):
@@ -283,8 +372,8 @@
     def fail_guard(self, descr):
         raise GuardFailed(self._getfailargs(), descr)
 
-    def execute_finish(self, descr, arg=None):
-        raise ExecutionFinished(descr, arg)
+    def execute_finish(self, descr, *args):
+        raise ExecutionFinished(descr, args)
 
     def execute_label(self, descr, *args):
         argboxes = self.current_op.getarglist()
@@ -370,48 +459,16 @@
         call_args = support.cast_call_args_in_order(args[0], args[1:])
         return self.cpu.call(args[0], descr, call_args)
 
-    def execute_getfield_gc(self, descr, p):
-        p = lltype.cast_opaque_ptr(lltype.Ptr(descr.S), p)
-        return support.cast_result(descr.FIELD, getattr(p, descr.fieldname))
+    def execute_same_as(self, _, x):
+        return x
 
-    def execute_setfield_gc(self, descr, p, newvalue):
-        p = lltype.cast_opaque_ptr(lltype.Ptr(descr.S), p)
-        setattr(p, descr.fieldname, support.cast_arg(descr.FIELD, newvalue))
+    def execute_debug_merge_point(self, descr, *args):
+        pass
 
-    def execute_arraylen_gc(self, descr, a):
-        array = a._obj.container
-        return array.getlength()
+    def execute_new_with_vtable(self, _, vtable):
+        descr = heaptracker.vtable2descr(self.cpu, vtable)
+        return self.cpu.bh_new_with_vtable(descr, vtable)
 
-    def execute_setarrayitem_gc(self, descr, a, index, item):
-        array = a._obj.container
-        array.setitem(index, support.cast_arg(descr.A.OF, item))
-
-    def execute_getarrayitem_gc(self, descr, a, index):
-        array = a._obj.container
-        return support.cast_result(descr.A.OF, array.getitem(index))
-
-    def execute_strlen(self, descr, s):
-        return s._obj.container.chars.getlength()
-
-    def execute_strgetitem(self, descr, s, item):
-        return ord(s._obj.container.chars.getitem(item))
-
-    def execute_strsetitem(self, descr, s, item, v):
-        s._obj.container.chars.setitem(item, chr(v))
-
-    def execute_copystrcontent(self, _, src, dst, srcstart, dststart, length):
-        src = lltype.cast_opaque_ptr(lltype.Ptr(rstr.STR), src)
-        dst = lltype.cast_opaque_ptr(lltype.Ptr(rstr.STR), dst)
-        assert 0 <= srcstart <= srcstart + length <= len(src.chars)
-        assert 0 <= dststart <= dststart + length <= len(dst.chars)
-        rstr.copy_string_contents(src, dst, srcstart, dststart, length)
-
-    def execute_copyunicodecontent(self, _, src, dst, srcstart, dststart, 
length):
-        src = lltype.cast_opaque_ptr(lltype.Ptr(rstr.UNICODE), src)
-        dst = lltype.cast_opaque_ptr(lltype.Ptr(rstr.UNICODE), dst)
-        assert 0 <= srcstart <= srcstart + length <= len(src.chars)
-        assert 0 <= dststart <= dststart + length <= len(dst.chars)
-        rstr.copy_unicode_contents(src, dst, srcstart, dststart, length)
 
 def _setup():
     def _make_impl_from_blackhole_interp(opname):
@@ -434,18 +491,21 @@
 
     def _new_execute(opname):
         def execute(self, descr, *args):
-            new_args = args + (descr,)
-            return getattr(self.cpu, 'do_' + opname)(*new_args)
+            if descr is not None:
+                new_args = args + (descr,)
+            else:
+                new_args = args
+            return getattr(self.cpu, 'bh_' + opname)(*new_args)
         execute.func_name = 'execute_' + opname
         return execute
 
     for k, v in rop.__dict__.iteritems():
         if not k.startswith("_"):
-            func = _make_impl_from_blackhole_interp(k)
             fname = 'execute_' + k.lower()
-            if func is not None and not hasattr(LLFrame, fname):
+            if not hasattr(LLFrame, fname):
+                func = _make_impl_from_blackhole_interp(k)
+                if func is None:
+                    func = _new_execute(k.lower())
                 setattr(LLFrame, fname, func)
-            elif hasattr(LLGraphCPU, 'do_' + k.lower()):
-                setattr(LLFrame, fname, _new_execute(k.lower()))
 
 _setup()
diff --git a/pypy/jit/backend/llsupport/llmodel.py 
b/pypy/jit/backend/llsupport/llmodel.py
--- a/pypy/jit/backend/llsupport/llmodel.py
+++ b/pypy/jit/backend/llsupport/llmodel.py
@@ -440,7 +440,7 @@
         # --- end of GC unsafe code ---
         return fval
 
-    def bh_setinteriorfield_gc_i(self, gcref, itemindex, descr, value):
+    def bh_setinteriorfield_gc_i(self, gcref, itemindex, value, descr):
         assert isinstance(descr, InteriorFieldDescr)
         arraydescr = descr.arraydescr
         ofs, size, _ = self.unpack_arraydescr_size(arraydescr)
@@ -458,7 +458,7 @@
         else:
             raise NotImplementedError("size = %d" % fieldsize)
 
-    def bh_setinteriorfield_gc_r(self, gcref, itemindex, descr, newvalue):
+    def bh_setinteriorfield_gc_r(self, gcref, itemindex, newvalue, descr):
         assert isinstance(descr, InteriorFieldDescr)
         arraydescr = descr.arraydescr
         ofs, size, _ = self.unpack_arraydescr_size(arraydescr)
@@ -471,7 +471,7 @@
         items[0] = self.cast_gcref_to_int(newvalue)
         # --- end of GC unsafe code ---
 
-    def bh_setinteriorfield_gc_f(self, gcref, itemindex, descr, newvalue):
+    def bh_setinteriorfield_gc_f(self, gcref, itemindex, newvalue, descr):
         assert isinstance(descr, InteriorFieldDescr)
         arraydescr = descr.arraydescr
         ofs, size, _ = self.unpack_arraydescr_size(arraydescr)
@@ -588,7 +588,7 @@
     bh_setfield_raw_r = _base_do_setfield_r
     bh_setfield_raw_f = _base_do_setfield_f
 
-    def bh_raw_store_i(self, addr, offset, descr, newvalue):
+    def bh_raw_store_i(self, addr, offset, newvalue, descr):
         ofs, size, sign = self.unpack_arraydescr_size(descr)
         items = addr + offset
         for TYPE, _, itemsize in unroll_basic_sizes:
@@ -597,7 +597,7 @@
                 items[0] = rffi.cast(TYPE, newvalue)
                 break
 
-    def bh_raw_store_f(self, addr, offset, descr, newvalue):
+    def bh_raw_store_f(self, addr, offset, newvalue, descr):
         items = rffi.cast(rffi.CArrayPtr(longlong.FLOATSTORAGE), addr + offset)
         items[0] = newvalue
 
diff --git a/pypy/jit/backend/model.py b/pypy/jit/backend/model.py
--- a/pypy/jit/backend/model.py
+++ b/pypy/jit/backend/model.py
@@ -233,11 +233,11 @@
     # lltype specific operations
     # --------------------------
 
-    def bh_getarrayitem_gc_i(self, arraydescr, array, index):
+    def bh_getarrayitem_gc_i(self, array, index, arraydescr):
         raise NotImplementedError
-    def bh_getarrayitem_gc_r(self, arraydescr, array, index):
+    def bh_getarrayitem_gc_r(self, array, index, arraydescr):
         raise NotImplementedError
-    def bh_getarrayitem_gc_f(self, arraydescr, array, index):
+    def bh_getarrayitem_gc_f(self, array, index, arraydescr):
         raise NotImplementedError
 
     def bh_getfield_gc_i(self, struct, fielddescr):
@@ -256,49 +256,63 @@
 
     def bh_new(self, sizedescr):
         raise NotImplementedError
-    def bh_new_with_vtable(self, sizedescr, vtable):
+    def bh_new_with_vtable(self, vtable, sizedescr):
         raise NotImplementedError
-    def bh_new_array(self, arraydescr, length):
+    def bh_new_array(self, length, arraydescr):
         raise NotImplementedError
     def bh_newstr(self, length):
         raise NotImplementedError
     def bh_newunicode(self, length):
         raise NotImplementedError
 
-    def bh_arraylen_gc(self, arraydescr, array):
+    def bh_arraylen_gc(self, array, arraydescr):
         raise NotImplementedError
 
     def bh_classof(self, struct):
         raise NotImplementedError
 
-    def bh_setarrayitem_gc_i(self, arraydescr, array, index, newvalue):
+    def bh_setarrayitem_gc_i(self, array, index, newvalue, arraydescr):
         raise NotImplementedError
-    def bh_setarrayitem_gc_r(self, arraydescr, array, index, newvalue):
+    def bh_setarrayitem_gc_r(self, array, index, newvalue, arraydescr):
         raise NotImplementedError
-    def bh_setarrayitem_gc_f(self, arraydescr, array, index, newvalue):
+    def bh_setarrayitem_gc_f(self, array, index, newvalue, arraydescr):
         raise NotImplementedError
 
-    def bh_setfield_gc_i(self, struct, fielddescr, newvalue):
+    def bh_setfield_gc_i(self, struct, newvalue, fielddescr):
         raise NotImplementedError
-    def bh_setfield_gc_r(self, struct, fielddescr, newvalue):
+    def bh_setfield_gc_r(self, struct, newvalue, fielddescr):
         raise NotImplementedError
-    def bh_setfield_gc_f(self, struct, fielddescr, newvalue):
+    def bh_setfield_gc_f(self, struct, newvalue, fielddescr):
         raise NotImplementedError
 
-    def bh_setfield_raw_i(self, struct, fielddescr, newvalue):
+    def bh_setfield_raw_i(self, struct, newvalue, fielddescr):
         raise NotImplementedError
-    def bh_setfield_raw_r(self, struct, fielddescr, newvalue):
+    def bh_setfield_raw_r(self, struct, newvalue, fielddescr):
         raise NotImplementedError
-    def bh_setfield_raw_f(self, struct, fielddescr, newvalue):
+    def bh_setfield_raw_f(self, struct, newvalue, fielddescr):
         raise NotImplementedError
 
-    def bh_call_i(self, func, calldescr, args_i, args_r, args_f):
+    def bh_getinteriorfield_gc_i(self, array, index, descr):
         raise NotImplementedError
-    def bh_call_r(self, func, calldescr, args_i, args_r, args_f):
+    def bh_getinteriorfield_gc_r(self, array, index, descr):
         raise NotImplementedError
-    def bh_call_f(self, func, calldescr, args_i, args_r, args_f):
+    def bh_getinteriorfield_gc_f(self, array, index, descr):
         raise NotImplementedError
-    def bh_call_v(self, func, calldescr, args_i, args_r, args_f):
+
+    def bh_setinteriorfield_gc_i(self, array, index, item, descr):
+        raise NotImplementedError
+    def bh_setinteriorfield_gc_r(self, array, index, item, descr):
+        raise NotImplementedError
+    def bh_setinteriorfield_gc_f(self, array, index, item, descr):
+        raise NotImplementedError
+
+    def bh_call_i(self, func, args_i, args_r, args_f, calldescr):
+        raise NotImplementedError
+    def bh_call_r(self, func, args_i, args_r, args_f, calldescr):
+        raise NotImplementedError
+    def bh_call_f(self, func, args_i, args_r, args_f, calldescr):
+        raise NotImplementedError
+    def bh_call_v(self, func, args_i, args_r, args_f, calldescr):
         raise NotImplementedError
 
     def bh_strlen(self, string):
diff --git a/pypy/jit/backend/test/runner_test.py 
b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -511,7 +511,7 @@
         calldescr = cpu.calldescrof(deref(FPTR), (lltype.Char,), lltype.Char,
                                     EffectInfo.MOST_GENERAL)
         x = cpu.bh_call_i(self.get_funcbox(cpu, func_ptr).value,
-                          calldescr, [ord('A')], None, None)
+                          [ord('A')], None, None, calldescr)
         assert x == ord('B')
         if cpu.supports_floats:
             def func(f, i):
@@ -525,8 +525,8 @@
             calldescr = cpu.calldescrof(FTP, FTP.ARGS, FTP.RESULT,
                                         EffectInfo.MOST_GENERAL)
             x = cpu.bh_call_f(self.get_funcbox(cpu, func_ptr).value,
-                              calldescr,
-                              [42], None, [longlong.getfloatstorage(3.5)])
+                              [42], None, [longlong.getfloatstorage(3.5)],
+                              calldescr)
             assert longlong.getrealfloat(x) == 3.5 - 42
 
     def test_call(self):
@@ -1926,7 +1926,7 @@
         assert s.parent.chr2 == chr(150)
         r = self.cpu.bh_getfield_gc_i(r1.value, descrshort)
         assert r == 1313
-        self.cpu.bh_setfield_gc_i(r1.value, descrshort, 1333)
+        self.cpu.bh_setfield_gc_i(r1.value, 1333, descrshort)
         r = self.cpu.bh_getfield_gc_i(r1.value, descrshort)
         assert r == 1333
         r = self.execute_operation(rop.GETFIELD_GC, [r1], 'int',
@@ -2681,7 +2681,7 @@
         #assert x.getref(rclass.OBJECTPTR).typeptr == vtable2
         #
         arraydescr = cpu.arraydescrof(A)
-        x = cpu.bh_new_array(arraydescr, 7)
+        x = cpu.bh_new_array(7, arraydescr)
         array = lltype.cast_opaque_ptr(lltype.Ptr(A), x)
         assert len(array) == 7
         #
@@ -3129,7 +3129,7 @@
             calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
                                              EffectInfo.MOST_GENERAL)
             x = self.cpu.bh_call_i(self.get_funcbox(self.cpu, f).value,
-                                   calldescr, [value], None, None)
+                                   [value], None, None, calldescr)
             assert x == expected, (
                 "%r: got %r, expected %r" % (RESTYPE, x, expected))
 
@@ -3198,7 +3198,7 @@
         calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
                                          EffectInfo.MOST_GENERAL)
         x = self.cpu.bh_call_f(self.get_funcbox(self.cpu, f).value,
-                               calldescr, None, None, [value])
+                               None, None, [value], calldescr)
         assert x == expected
 
     def test_longlong_result_of_call_compiled(self):
@@ -3257,7 +3257,7 @@
         ivalue = longlong.singlefloat2int(value)
         iexpected = longlong.singlefloat2int(expected)
         x = self.cpu.bh_call_i(self.get_funcbox(self.cpu, f).value,
-                               calldescr, [ivalue], None, None)
+                               [ivalue], None, None, calldescr)
         assert x == iexpected
 
     def test_singlefloat_result_of_call_compiled(self):
diff --git a/pypy/jit/metainterp/blackhole.py b/pypy/jit/metainterp/blackhole.py
--- a/pypy/jit/metainterp/blackhole.py
+++ b/pypy/jit/metainterp/blackhole.py
@@ -936,34 +936,34 @@
     def bhimpl_recursive_call_i(self, jdindex, greens_i, greens_r, greens_f,
                                                reds_i,   reds_r,   reds_f):
         fnptr, calldescr = self.get_portal_runner(jdindex)
-        return self.cpu.bh_call_i(fnptr, calldescr,
+        return self.cpu.bh_call_i(fnptr,
                                   greens_i + reds_i,
                                   greens_r + reds_r,
-                                  greens_f + reds_f)
+                                  greens_f + reds_f,  calldescr)
     @arguments("self", "i", "I", "R", "F", "I", "R", "F", returns="r")
     def bhimpl_recursive_call_r(self, jdindex, greens_i, greens_r, greens_f,
                                                reds_i,   reds_r,   reds_f):
         fnptr, calldescr = self.get_portal_runner(jdindex)
-        return self.cpu.bh_call_r(fnptr, calldescr,
+        return self.cpu.bh_call_r(fnptr,
                                   greens_i + reds_i,
                                   greens_r + reds_r,
-                                  greens_f + reds_f)
+                                  greens_f + reds_f, calldescr)
     @arguments("self", "i", "I", "R", "F", "I", "R", "F", returns="f")
     def bhimpl_recursive_call_f(self, jdindex, greens_i, greens_r, greens_f,
                                                reds_i,   reds_r,   reds_f):
         fnptr, calldescr = self.get_portal_runner(jdindex)
-        return self.cpu.bh_call_f(fnptr, calldescr,
+        return self.cpu.bh_call_f(fnptr,
                                   greens_i + reds_i,
                                   greens_r + reds_r,
-                                  greens_f + reds_f)
+                                  greens_f + reds_f, calldescr)
     @arguments("self", "i", "I", "R", "F", "I", "R", "F")
     def bhimpl_recursive_call_v(self, jdindex, greens_i, greens_r, greens_f,
                                                reds_i,   reds_r,   reds_f):
         fnptr, calldescr = self.get_portal_runner(jdindex)
-        return self.cpu.bh_call_v(fnptr, calldescr,
+        return self.cpu.bh_call_v(fnptr,
                                   greens_i + reds_i,
                                   greens_r + reds_r,
-                                  greens_f + reds_f)
+                                  greens_f + reds_f, calldescr)
 
     # ----------
     # virtual refs
@@ -982,7 +982,7 @@
     @arguments("cpu", "r", "d", "i", returns="i")
     def bhimpl_check_neg_index(cpu, array, arraydescr, index):
         if index < 0:
-            index += cpu.bh_arraylen_gc(arraydescr, array)
+            index += cpu.bh_arraylen_gc(array, arraydescr)
         return index
 
     @arguments("cpu", "r", "d", "i", returns="i")
@@ -995,138 +995,138 @@
     def bhimpl_newlist(cpu, structdescr, lengthdescr, itemsdescr,
                        arraydescr, length):
         result = cpu.bh_new(structdescr)
-        cpu.bh_setfield_gc_i(result, lengthdescr, length)
-        items = cpu.bh_new_array(arraydescr, length)
-        cpu.bh_setfield_gc_r(result, itemsdescr, items)
+        cpu.bh_setfield_gc_i(result, length, lengthdescr)
+        items = cpu.bh_new_array(length, arraydescr)
+        cpu.bh_setfield_gc_r(result, items, itemsdescr)
         return result
 
     @arguments("cpu", "d", "d", "d", "d", "i", returns="r")
     def bhimpl_newlist_hint(cpu, structdescr, lengthdescr, itemsdescr,
                             arraydescr, lengthhint):
         result = cpu.bh_new(structdescr)
-        cpu.bh_setfield_gc_i(result, lengthdescr, 0)
-        items = cpu.bh_new_array(arraydescr, lengthhint)
-        cpu.bh_setfield_gc_r(result, itemsdescr, items)
+        cpu.bh_setfield_gc_i(result, 0, lengthdescr)
+        items = cpu.bh_new_array(lengthhint, arraydescr)
+        cpu.bh_setfield_gc_r(result, items, itemsdescr)
         return result
 
     @arguments("cpu", "r", "d", "d", "i", returns="i")
     def bhimpl_getlistitem_gc_i(cpu, lst, itemsdescr, arraydescr, index):
         items = cpu.bh_getfield_gc_r(lst, itemsdescr)
-        return cpu.bh_getarrayitem_gc_i(arraydescr, items, index)
+        return cpu.bh_getarrayitem_gc_i(items, index, arraydescr)
     @arguments("cpu", "r", "d", "d", "i", returns="r")
     def bhimpl_getlistitem_gc_r(cpu, lst, itemsdescr, arraydescr, index):
         items = cpu.bh_getfield_gc_r(lst, itemsdescr)
-        return cpu.bh_getarrayitem_gc_r(arraydescr, items, index)
+        return cpu.bh_getarrayitem_gc_r(items, index, arraydescr)
     @arguments("cpu", "r", "d", "d", "i", returns="f")
     def bhimpl_getlistitem_gc_f(cpu, lst, itemsdescr, arraydescr, index):
         items = cpu.bh_getfield_gc_r(lst, itemsdescr)
-        return cpu.bh_getarrayitem_gc_f(arraydescr, items, index)
+        return cpu.bh_getarrayitem_gc_f(items, index, arraydescr)
 
     @arguments("cpu", "r", "d", "d", "i", "i")
     def bhimpl_setlistitem_gc_i(cpu, lst, itemsdescr, arraydescr, index, nval):
         items = cpu.bh_getfield_gc_r(lst, itemsdescr)
-        cpu.bh_setarrayitem_gc_i(arraydescr, items, index, nval)
+        cpu.bh_setarrayitem_gc_i(items, index, nval, arraydescr)
     @arguments("cpu", "r", "d", "d", "i", "r")
     def bhimpl_setlistitem_gc_r(cpu, lst, itemsdescr, arraydescr, index, nval):
         items = cpu.bh_getfield_gc_r(lst, itemsdescr)
-        cpu.bh_setarrayitem_gc_r(arraydescr, items, index, nval)
+        cpu.bh_setarrayitem_gc_r(items, index, nval, arraydescr)
     @arguments("cpu", "r", "d", "d", "i", "f")
     def bhimpl_setlistitem_gc_f(cpu, lst, itemsdescr, arraydescr, index, nval):
         items = cpu.bh_getfield_gc_r(lst, itemsdescr)
-        cpu.bh_setarrayitem_gc_f(arraydescr, items, index, nval)
+        cpu.bh_setarrayitem_gc_f(items, index, nval, arraydescr)
 
     # ----------
     # the following operations are directly implemented by the backend
 
     @arguments("cpu", "i", "d", "R", returns="i")
     def bhimpl_residual_call_r_i(cpu, func, calldescr, args_r):
-        return cpu.bh_call_i(func, calldescr, None, args_r, None)
+        return cpu.bh_call_i(func, None, args_r, None, calldescr)
     @arguments("cpu", "i", "d", "R", returns="r")
     def bhimpl_residual_call_r_r(cpu, func, calldescr, args_r):
-        return cpu.bh_call_r(func, calldescr, None, args_r, None)
+        return cpu.bh_call_r(func, None, args_r, None, calldescr)
     @arguments("cpu", "i", "d", "R")
     def bhimpl_residual_call_r_v(cpu, func, calldescr, args_r):
-        return cpu.bh_call_v(func, calldescr, None, args_r, None)
+        return cpu.bh_call_v(func, None, args_r, None, calldescr)
 
     @arguments("cpu", "i", "d", "I", "R", returns="i")
     def bhimpl_residual_call_ir_i(cpu, func, calldescr, args_i, args_r):
-        return cpu.bh_call_i(func, calldescr, args_i, args_r, None)
+        return cpu.bh_call_i(func, args_i, args_r, None, calldescr)
     @arguments("cpu", "i", "d", "I", "R", returns="r")
     def bhimpl_residual_call_ir_r(cpu, func, calldescr, args_i, args_r):
-        return cpu.bh_call_r(func, calldescr, args_i, args_r, None)
+        return cpu.bh_call_r(func, args_i, args_r, None, calldescr)
     @arguments("cpu", "i", "d", "I", "R")
     def bhimpl_residual_call_ir_v(cpu, func, calldescr, args_i, args_r):
-        return cpu.bh_call_v(func, calldescr, args_i, args_r, None)
+        return cpu.bh_call_v(func, args_i, args_r, None, calldescr)
 
     @arguments("cpu", "i", "d", "I", "R", "F", returns="i")
     def bhimpl_residual_call_irf_i(cpu, func, calldescr,args_i,args_r,args_f):
-        return cpu.bh_call_i(func, calldescr, args_i, args_r, args_f)
+        return cpu.bh_call_i(func, args_i, args_r, args_f, calldescr)
     @arguments("cpu", "i", "d", "I", "R", "F", returns="r")
     def bhimpl_residual_call_irf_r(cpu, func, calldescr,args_i,args_r,args_f):
-        return cpu.bh_call_r(func, calldescr, args_i, args_r, args_f)
+        return cpu.bh_call_r(func, args_i, args_r, args_f, calldescr)
     @arguments("cpu", "i", "d", "I", "R", "F", returns="f")
     def bhimpl_residual_call_irf_f(cpu, func, calldescr,args_i,args_r,args_f):
-        return cpu.bh_call_f(func, calldescr, args_i, args_r, args_f)
+        return cpu.bh_call_f(func, args_i, args_r, args_f, calldescr)
     @arguments("cpu", "i", "d", "I", "R", "F")
     def bhimpl_residual_call_irf_v(cpu, func, calldescr,args_i,args_r,args_f):
-        return cpu.bh_call_v(func, calldescr, args_i, args_r, args_f)
+        return cpu.bh_call_v(func, args_i, args_r, args_f, calldescr)
 
     @arguments("cpu", "j", "R", returns="i")
     def bhimpl_inline_call_r_i(cpu, jitcode, args_r):
-        return cpu.bh_call_i(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             None, args_r, None)
+        return cpu.bh_call_i(jitcode.get_fnaddr_as_int(),
+                             None, args_r, None, jitcode.calldescr)
     @arguments("cpu", "j", "R", returns="r")
     def bhimpl_inline_call_r_r(cpu, jitcode, args_r):
-        return cpu.bh_call_r(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             None, args_r, None)
+        return cpu.bh_call_r(jitcode.get_fnaddr_as_int(),
+                             None, args_r, None, jitcode.calldescr)
     @arguments("cpu", "j", "R")
     def bhimpl_inline_call_r_v(cpu, jitcode, args_r):
-        return cpu.bh_call_v(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             None, args_r, None)
+        return cpu.bh_call_v(jitcode.get_fnaddr_as_int(),
+                             None, args_r, None, jitcode.calldescr)
 
     @arguments("cpu", "j", "I", "R", returns="i")
     def bhimpl_inline_call_ir_i(cpu, jitcode, args_i, args_r):
-        return cpu.bh_call_i(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, None)
+        return cpu.bh_call_i(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, None, jitcode.calldescr)
     @arguments("cpu", "j", "I", "R", returns="r")
     def bhimpl_inline_call_ir_r(cpu, jitcode, args_i, args_r):
-        return cpu.bh_call_r(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, None)
+        return cpu.bh_call_r(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, None, jitcode.calldescr)
     @arguments("cpu", "j", "I", "R")
     def bhimpl_inline_call_ir_v(cpu, jitcode, args_i, args_r):
-        return cpu.bh_call_v(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, None)
+        return cpu.bh_call_v(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, None, jitcode.calldescr)
 
     @arguments("cpu", "j", "I", "R", "F", returns="i")
     def bhimpl_inline_call_irf_i(cpu, jitcode, args_i, args_r, args_f):
-        return cpu.bh_call_i(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, args_f)
+        return cpu.bh_call_i(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, args_f, jitcode.calldescr)
     @arguments("cpu", "j", "I", "R", "F", returns="r")
     def bhimpl_inline_call_irf_r(cpu, jitcode, args_i, args_r, args_f):
-        return cpu.bh_call_r(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, args_f)
+        return cpu.bh_call_r(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, args_f, jitcode.calldescr)
     @arguments("cpu", "j", "I", "R", "F", returns="f")
     def bhimpl_inline_call_irf_f(cpu, jitcode, args_i, args_r, args_f):
-        return cpu.bh_call_f(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, args_f)
+        return cpu.bh_call_f(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, args_f, jitcode.calldescr)
     @arguments("cpu", "j", "I", "R", "F")
     def bhimpl_inline_call_irf_v(cpu, jitcode, args_i, args_r, args_f):
-        return cpu.bh_call_v(jitcode.get_fnaddr_as_int(), jitcode.calldescr,
-                             args_i, args_r, args_f)
+        return cpu.bh_call_v(jitcode.get_fnaddr_as_int(),
+                             args_i, args_r, args_f, jitcode.calldescr)
 
     @arguments("cpu", "d", "i", returns="r")
     def bhimpl_new_array(cpu, arraydescr, length):
-        return cpu.bh_new_array(arraydescr, length)
+        return cpu.bh_new_array(length, arraydescr)
 
     @arguments("cpu", "r", "d", "i", returns="i")
     def bhimpl_getarrayitem_gc_i(cpu, array, arraydescr, index):
-        return cpu.bh_getarrayitem_gc_i(arraydescr, array, index)
+        return cpu.bh_getarrayitem_gc_i(array, index, arraydescr)
     @arguments("cpu", "r", "d", "i", returns="r")
     def bhimpl_getarrayitem_gc_r(cpu, array, arraydescr, index):
-        return cpu.bh_getarrayitem_gc_r(arraydescr, array, index)
+        return cpu.bh_getarrayitem_gc_r(array, index, arraydescr)
     @arguments("cpu", "r", "d", "i", returns="f")
     def bhimpl_getarrayitem_gc_f(cpu, array, arraydescr, index):
-        return cpu.bh_getarrayitem_gc_f(arraydescr, array, index)
+        return cpu.bh_getarrayitem_gc_f(array, index, arraydescr)
 
     bhimpl_getarrayitem_gc_i_pure = bhimpl_getarrayitem_gc_i
     bhimpl_getarrayitem_gc_r_pure = bhimpl_getarrayitem_gc_r
@@ -1134,67 +1134,67 @@
 
     @arguments("cpu", "i", "d", "i", returns="i")
     def bhimpl_getarrayitem_raw_i(cpu, array, arraydescr, index):
-        return cpu.bh_getarrayitem_raw_i(arraydescr, array, index)
+        return cpu.bh_getarrayitem_raw_i(array, index, arraydescr)
     @arguments("cpu", "i", "d", "i", returns="f")
     def bhimpl_getarrayitem_raw_f(cpu, array, arraydescr, index):
-        return cpu.bh_getarrayitem_raw_f(arraydescr, array, index)
+        return cpu.bh_getarrayitem_raw_f(array, index, arraydescr)
 
     bhimpl_getarrayitem_raw_i_pure = bhimpl_getarrayitem_raw_i
     bhimpl_getarrayitem_raw_f_pure = bhimpl_getarrayitem_raw_f
 
     @arguments("cpu", "r", "d", "i", "i")
     def bhimpl_setarrayitem_gc_i(cpu, array, arraydescr, index, newvalue):
-        cpu.bh_setarrayitem_gc_i(arraydescr, array, index, newvalue)
+        cpu.bh_setarrayitem_gc_i(array, index, newvalue, arraydescr)
     @arguments("cpu", "r", "d", "i", "r")
     def bhimpl_setarrayitem_gc_r(cpu, array, arraydescr, index, newvalue):
-        cpu.bh_setarrayitem_gc_r(arraydescr, array, index, newvalue)
+        cpu.bh_setarrayitem_gc_r(array, index, newvalue, arraydescr)
     @arguments("cpu", "r", "d", "i", "f")
     def bhimpl_setarrayitem_gc_f(cpu, array, arraydescr, index, newvalue):
-        cpu.bh_setarrayitem_gc_f(arraydescr, array, index, newvalue)
+        cpu.bh_setarrayitem_gc_f(array, index, newvalue, arraydescr)
 
     @arguments("cpu", "i", "d", "i", "i")
     def bhimpl_setarrayitem_raw_i(cpu, array, arraydescr, index, newvalue):
-        cpu.bh_setarrayitem_raw_i(arraydescr, array, index, newvalue)
+        cpu.bh_setarrayitem_raw_i(array, index, newvalue, arraydescr)
     @arguments("cpu", "i", "d", "i", "f")
     def bhimpl_setarrayitem_raw_f(cpu, array, arraydescr, index, newvalue):
-        cpu.bh_setarrayitem_raw_f(arraydescr, array, index, newvalue)
+        cpu.bh_setarrayitem_raw_f(array, index, newvalue, arraydescr)
 
     # note, there is no 'r' here, since it can't happen
 
     @arguments("cpu", "r", "d", returns="i")
     def bhimpl_arraylen_gc(cpu, array, arraydescr):
-        return cpu.bh_arraylen_gc(arraydescr, array)
+        return cpu.bh_arraylen_gc(array, arraydescr)
 
     @arguments("cpu", "r", "d", "d", "i", returns="i")
     def bhimpl_getarrayitem_vable_i(cpu, vable, fielddescr, arraydescr, index):
         array = cpu.bh_getfield_gc_r(vable, fielddescr)
-        return cpu.bh_getarrayitem_gc_i(arraydescr, array, index)
+        return cpu.bh_getarrayitem_gc_i(array, index, arraydescr)
     @arguments("cpu", "r", "d", "d", "i", returns="r")
     def bhimpl_getarrayitem_vable_r(cpu, vable, fielddescr, arraydescr, index):
         array = cpu.bh_getfield_gc_r(vable, fielddescr)
-        return cpu.bh_getarrayitem_gc_r(arraydescr, array, index)
+        return cpu.bh_getarrayitem_gc_r(array, index, arraydescr)
     @arguments("cpu", "r", "d", "d", "i", returns="f")
     def bhimpl_getarrayitem_vable_f(cpu, vable, fielddescr, arraydescr, index):
         array = cpu.bh_getfield_gc_r(vable, fielddescr)
-        return cpu.bh_getarrayitem_gc_f(arraydescr, array, index)
+        return cpu.bh_getarrayitem_gc_f(array, index, arraydescr)
 
     @arguments("cpu", "r", "d", "d", "i", "i")
     def bhimpl_setarrayitem_vable_i(cpu, vable, fdescr, adescr, index, newval):
         array = cpu.bh_getfield_gc_r(vable, fdescr)
-        cpu.bh_setarrayitem_gc_i(adescr, array, index, newval)
+        cpu.bh_setarrayitem_gc_i(array, index, newval, adescr)
     @arguments("cpu", "r", "d", "d", "i", "r")
     def bhimpl_setarrayitem_vable_r(cpu, vable, fdescr, adescr, index, newval):
         array = cpu.bh_getfield_gc_r(vable, fdescr)
-        cpu.bh_setarrayitem_gc_r(adescr, array, index, newval)
+        cpu.bh_setarrayitem_gc_r(array, index, newval, adescr)
     @arguments("cpu", "r", "d", "d", "i", "f")
     def bhimpl_setarrayitem_vable_f(cpu, vable, fdescr, adescr, index, newval):
         array = cpu.bh_getfield_gc_r(vable, fdescr)
-        cpu.bh_setarrayitem_gc_f(adescr, array, index, newval)
+        cpu.bh_setarrayitem_gc_f(array, index, newval, adescr)
 
     @arguments("cpu", "r", "d", "d", returns="i")
     def bhimpl_arraylen_vable(cpu, vable, fdescr, adescr):
         array = cpu.bh_getfield_gc_r(vable, fdescr)
-        return cpu.bh_arraylen_gc(adescr, array)
+        return cpu.bh_arraylen_gc(array, adescr)
 
     @arguments("cpu", "r", "i", "d", returns="i")
     def bhimpl_getinteriorfield_gc_i(cpu, array, index, descr):
@@ -1254,13 +1254,13 @@
 
     @arguments("cpu", "r", "d", "i")
     def bhimpl_setfield_gc_i(cpu, struct, fielddescr, newvalue):
-        cpu.bh_setfield_gc_i(struct, fielddescr, newvalue)
+        cpu.bh_setfield_gc_i(struct, newvalue, fielddescr)
     @arguments("cpu", "r", "d", "r")
     def bhimpl_setfield_gc_r(cpu, struct, fielddescr, newvalue):
-        cpu.bh_setfield_gc_r(struct, fielddescr, newvalue)
+        cpu.bh_setfield_gc_r(struct, newvalue, fielddescr)
     @arguments("cpu", "r", "d", "f")
     def bhimpl_setfield_gc_f(cpu, struct, fielddescr, newvalue):
-        cpu.bh_setfield_gc_f(struct, fielddescr, newvalue)
+        cpu.bh_setfield_gc_f(struct, newvalue, fielddescr)
 
     bhimpl_setfield_vable_i = bhimpl_setfield_gc_i
     bhimpl_setfield_vable_r = bhimpl_setfield_gc_r
@@ -1268,20 +1268,20 @@
 
     @arguments("cpu", "i", "d", "i")
     def bhimpl_setfield_raw_i(cpu, struct, fielddescr, newvalue):
-        cpu.bh_setfield_raw_i(struct, fielddescr, newvalue)
+        cpu.bh_setfield_raw_i(struct, newvalue, fielddescr)
     @arguments("cpu", "i", "d", "r")
     def bhimpl_setfield_raw_r(cpu, struct, fielddescr, newvalue):
-        cpu.bh_setfield_raw_r(struct, fielddescr, newvalue)
+        cpu.bh_setfield_raw_r(struct, newvalue, fielddescr)
     @arguments("cpu", "i", "d", "f")
     def bhimpl_setfield_raw_f(cpu, struct, fielddescr, newvalue):
-        cpu.bh_setfield_raw_f(struct, fielddescr, newvalue)
+        cpu.bh_setfield_raw_f(struct, newvalue, fielddescr)
 
     @arguments("cpu", "i", "i", "d", "i")
     def bhimpl_raw_store_i(cpu, addr, offset, arraydescr, newvalue):
-        cpu.bh_raw_store_i(addr, offset, arraydescr, newvalue)
+        cpu.bh_raw_store_i(addr, offset, newvalue, arraydescr)
     @arguments("cpu", "i", "i", "d", "f")
     def bhimpl_raw_store_f(cpu, addr, offset, arraydescr, newvalue):
-        cpu.bh_raw_store_f(addr, offset, arraydescr, newvalue)
+        cpu.bh_raw_store_f(addr, offset, newvalue, arraydescr)
 
     @arguments("cpu", "i", "i", "d", returns="i")
     def bhimpl_raw_load_i(cpu, addr, offset, arraydescr):
@@ -1306,7 +1306,7 @@
     @arguments("cpu", "d", returns="r")
     def bhimpl_new_with_vtable(cpu, descr):
         vtable = heaptracker.descr2vtable(cpu, descr)
-        return cpu.bh_new_with_vtable(descr, vtable)
+        return cpu.bh_new_with_vtable(vtable, descr)
 
     @arguments("cpu", "r", returns="i")
     def bhimpl_guard_class(cpu, struct):
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to