[pypy-svn] r67775 - pypy/branch/execute-star-args-jit/pypy/jit/metainterp

cfbolz at codespeak.net cfbolz at codespeak.net
Fri Sep 18 16:20:38 CEST 2009


Author: cfbolz
Date: Fri Sep 18 16:20:37 2009
New Revision: 67775

Modified:
   pypy/branch/execute-star-args-jit/pypy/jit/metainterp/pyjitpl.py
Log:
(pedronis, cfbolz, arigo around): construct lists a bit later in the metainterp.


Modified: pypy/branch/execute-star-args-jit/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/execute-star-args-jit/pypy/jit/metainterp/pyjitpl.py	(original)
+++ pypy/branch/execute-star-args-jit/pypy/jit/metainterp/pyjitpl.py	Fri Sep 18 16:20:37 2009
@@ -235,14 +235,14 @@
         exec py.code.Source('''
             @arguments("box", "box")
             def opimpl_%s(self, b1, b2):
-                self.execute(rop.%s, [b1, b2])
+                self.execute(rop.%s, b1, b2)
         ''' % (_opimpl, _opimpl.upper())).compile()
 
     for _opimpl in ['int_add_ovf', 'int_sub_ovf', 'int_mul_ovf']:
         exec py.code.Source('''
             @arguments("box", "box")
             def opimpl_%s(self, b1, b2):
-                self.execute(rop.%s, [b1, b2])
+                self.execute(rop.%s, b1, b2)
                 return self.metainterp.handle_overflow_error()
         ''' % (_opimpl, _opimpl.upper())).compile()
 
@@ -254,7 +254,7 @@
         exec py.code.Source('''
             @arguments("box")
             def opimpl_%s(self, b):
-                self.execute(rop.%s, [b])
+                self.execute(rop.%s, b)
         ''' % (_opimpl, _opimpl.upper())).compile()
 
     @arguments()
@@ -321,50 +321,47 @@
 
     @arguments("descr")
     def opimpl_new(self, size):
-        self.execute(rop.NEW, [], descr=size)
+        self.execute_with_descr(rop.NEW, descr=size)
 
     @arguments("constbox")
     def opimpl_new_with_vtable(self, vtablebox):
-        self.execute(rop.NEW_WITH_VTABLE, [vtablebox])
+        self.execute(rop.NEW_WITH_VTABLE, vtablebox)
 
     @arguments("box")
     def opimpl_runtimenew(self, classbox):
-        self.execute(rop.RUNTIMENEW, [classbox])
+        self.execute(rop.RUNTIMENEW, classbox)
 
     @arguments("box", "descr")
     def opimpl_instanceof(self, box, typedescr):
-        self.execute(rop.INSTANCEOF, [box], descr=typedescr)
+        self.execute_with_descr(rop.INSTANCEOF, typedescr, box)
 
     @arguments("box", "box")
     def opimpl_subclassof(self, box1, box2):
-        self.execute(rop.SUBCLASSOF, [box1, box2], descr=None)
+        self.execute(rop.SUBCLASSOF, box1, box2)
 
     @arguments("box")
     def opimpl_ooidentityhash(self, box):
-        self.execute(rop.OOIDENTITYHASH, [box], descr=None)
+        self.execute(rop.OOIDENTITYHASH, box)
 
     @arguments("descr", "box")
     def opimpl_new_array(self, itemsize, countbox):
-        self.execute(rop.NEW_ARRAY, [countbox], descr=itemsize)
+        self.execute_with_descr(rop.NEW_ARRAY, itemsize, countbox)
 
     @arguments("box", "descr", "box")
     def opimpl_getarrayitem_gc(self, arraybox, arraydesc, indexbox):
-        self.execute(rop.GETARRAYITEM_GC, [arraybox, indexbox],
-                     descr=arraydesc)
+        self.execute_with_descr(rop.GETARRAYITEM_GC, arraydesc, arraybox, indexbox)
 
     @arguments("box", "descr", "box")
     def opimpl_getarrayitem_gc_pure(self, arraybox, arraydesc, indexbox):
-        self.execute(rop.GETARRAYITEM_GC_PURE, [arraybox, indexbox],
-                     descr=arraydesc)
+        self.execute_with_descr(rop.GETARRAYITEM_GC_PURE, arraydesc, arraybox, indexbox)
 
     @arguments("box", "descr", "box", "box")
     def opimpl_setarrayitem_gc(self, arraybox, arraydesc, indexbox, itembox):
-        self.execute(rop.SETARRAYITEM_GC, [arraybox, indexbox, itembox],
-                     descr=arraydesc)
+        self.execute_with_descr(rop.SETARRAYITEM_GC, arraydesc, arraybox, indexbox, itembox)
 
     @arguments("box", "descr")
     def opimpl_arraylen_gc(self, arraybox, arraydesc):
-        self.execute(rop.ARRAYLEN_GC, [arraybox], descr=arraydesc)
+        self.execute_with_descr(rop.ARRAYLEN_GC, arraydesc, arraybox)
 
     @arguments("orgpc", "box", "descr", "box")
     def opimpl_check_neg_index(self, pc, arraybox, arraydesc, indexbox):
@@ -397,16 +394,14 @@
     def opimpl_getlistitem_gc(self, listbox, itemsdescr, arraydescr, indexbox):
         arraybox = self.metainterp.execute_and_record(rop.GETFIELD_GC,
                                           [listbox], descr=itemsdescr)
-        self.execute(rop.GETARRAYITEM_GC, [arraybox, indexbox],
-                     descr=arraydescr)
+        self.execute_with_descr(rop.GETARRAYITEM_GC, arraydescr, arraybox, indexbox)
 
     @arguments("box", "descr", "descr", "box", "box")
     def opimpl_setlistitem_gc(self, listbox, itemsdescr, arraydescr, indexbox,
                               valuebox):
         arraybox = self.metainterp.execute_and_record(rop.GETFIELD_GC,
                                           [listbox], descr=itemsdescr) 
-        self.execute(rop.SETARRAYITEM_GC, [arraybox, indexbox, valuebox],
-                     descr=arraydescr)
+        self.execute_with_descr(rop.SETARRAYITEM_GC, arraydescr, arraybox, indexbox, valuebox)
 
     @arguments("orgpc", "box", "descr", "box")
     def opimpl_check_resizable_neg_index(self, pc, listbox, lengthdesc,
@@ -466,49 +461,49 @@
         if nonneg.getint():
             self.make_result_box(box)
         else:
-            self.execute(rop.INT_NEG, [box])
+            self.execute(rop.INT_NEG, box)
 
     @arguments("box")
     def opimpl_ptr_nonzero(self, box):
-        self.execute(rop.OONONNULL, [box])
+        self.execute(rop.OONONNULL, box)
 
     @arguments("box")
     def opimpl_ptr_iszero(self, box):
-        self.execute(rop.OOISNULL, [box])
+        self.execute(rop.OOISNULL, box)
 
     opimpl_oononnull = opimpl_ptr_nonzero
     opimpl_ooisnull = opimpl_ptr_iszero
 
     @arguments("box", "box")
     def opimpl_ptr_eq(self, box1, box2):
-        self.execute(rop.OOIS, [box1, box2])
+        self.execute(rop.OOIS, box1, box2)
 
     @arguments("box", "box")
     def opimpl_ptr_ne(self, box1, box2):
-        self.execute(rop.OOISNOT, [box1, box2])
+        self.execute(rop.OOISNOT, box1, box2)
 
     opimpl_oois = opimpl_ptr_eq
     opimpl_ooisnot = opimpl_ptr_ne
 
     @arguments("box", "descr")
     def opimpl_getfield_gc(self, box, fielddesc):
-        self.execute(rop.GETFIELD_GC, [box], descr=fielddesc)
+        self.execute_with_descr(rop.GETFIELD_GC, fielddesc, box)
     @arguments("box", "descr")
     def opimpl_getfield_gc_pure(self, box, fielddesc):
-        self.execute(rop.GETFIELD_GC_PURE, [box], descr=fielddesc)
+        self.execute_with_descr(rop.GETFIELD_GC_PURE, fielddesc, box)
     @arguments("box", "descr", "box")
     def opimpl_setfield_gc(self, box, fielddesc, valuebox):
-        self.execute(rop.SETFIELD_GC, [box, valuebox], descr=fielddesc)
+        self.execute_with_descr(rop.SETFIELD_GC, fielddesc, box, valuebox)
 
     @arguments("box", "descr")
     def opimpl_getfield_raw(self, box, fielddesc):
-        self.execute(rop.GETFIELD_RAW, [box], descr=fielddesc)
+        self.execute_with_descr(rop.GETFIELD_RAW, fielddesc, box)
     @arguments("box", "descr")
     def opimpl_getfield_raw_pure(self, box, fielddesc):
-        self.execute(rop.GETFIELD_RAW_PURE, [box], descr=fielddesc)
+        self.execute_with_descr(rop.GETFIELD_RAW_PURE, fielddesc, box)
     @arguments("box", "descr", "box")
     def opimpl_setfield_raw(self, box, fielddesc, valuebox):
-        self.execute(rop.SETFIELD_RAW, [box, valuebox], descr=fielddesc)
+        self.execute_with_descr(rop.SETFIELD_RAW, fielddesc, box, valuebox)
 
     def _nonstandard_virtualizable(self, pc, box):
         # returns True if 'box' is actually not the "standard" virtualizable
@@ -539,8 +534,7 @@
     @arguments("orgpc", "box", "int")
     def opimpl_getfield_vable(self, pc, basebox, index):
         if self._nonstandard_virtualizable(pc, basebox):
-            self.execute(rop.GETFIELD_GC, [basebox],
-                         descr=self._get_virtualizable_field_descr(index))
+            self.execute_with_descr(rop.GETFIELD_GC, self._get_virtualizable_field_descr(index), basebox)
             return
         self.metainterp.check_synchronized_virtualizable()
         resbox = self.metainterp.virtualizable_boxes[index]
@@ -548,8 +542,7 @@
     @arguments("orgpc", "box", "int", "box")
     def opimpl_setfield_vable(self, pc, basebox, index, valuebox):
         if self._nonstandard_virtualizable(pc, basebox):
-            self.execute(rop.SETFIELD_GC, [basebox, valuebox],
-                         descr=self._get_virtualizable_field_descr(index))
+            self.execute_with_descr(rop.SETFIELD_GC, self._get_virtualizable_field_descr(index), basebox, valuebox)
             return
         self.metainterp.virtualizable_boxes[index] = valuebox
         self.metainterp.synchronize_virtualizable()
@@ -624,12 +617,12 @@
             if jitcode.cfnptr is not None:
                 # for non-oosends
                 varargs = [jitcode.cfnptr] + varargs
-                res = self.execute_with_exc(rop.CALL, varargs,
-                                             descr=jitcode.calldescr)
+                res = self.execute_varargs(rop.CALL, varargs,
+                                             descr=jitcode.calldescr, exc=True)
             else:
                 # for oosends (ootype only): calldescr is a MethDescr
-                res = self.execute_with_exc(rop.OOSEND, varargs,
-                                             descr=jitcode.calldescr)
+                res = self.execute_varargs(rop.OOSEND, varargs,
+                                             descr=jitcode.calldescr, exc=True)
             if vi:
                 globaldata.blackhole_virtualizable = vi.null_vable
             return res
@@ -645,7 +638,7 @@
 
     @arguments("descr", "varargs")
     def opimpl_residual_call(self, calldescr, varargs):
-        return self.execute_with_exc(rop.CALL, varargs, descr=calldescr)
+        return self.execute_varargs(rop.CALL, varargs, descr=calldescr, exc=True)
 
     @arguments("varargs")
     def opimpl_recursion_leave_prep(self, varargs):
@@ -669,68 +662,18 @@
             greenkey = varargs[1:num_green_args + 1]
             if warmrunnerstate.can_inline_callable(greenkey):
                 return self.perform_call(portal_code, varargs[1:])
-        return self.execute_with_exc(rop.CALL, varargs, descr=calldescr)
+        return self.execute_varargs(rop.CALL, varargs, descr=calldescr, exc=True)
 
     @arguments("descr", "varargs")
     def opimpl_residual_call_noexception(self, calldescr, varargs):
         if not we_are_translated():
             self.metainterp._debug_history.append(['call',
                                                   varargs[0], varargs[1:]])
-        self.execute(rop.CALL, varargs, descr=calldescr)
+        self.execute_varargs(rop.CALL, varargs, descr=calldescr, exc=False)
 
     @arguments("descr", "varargs")
     def opimpl_residual_call_pure(self, calldescr, varargs):
-        self.execute(rop.CALL_PURE, varargs, descr=calldescr)
-
-##    @arguments("fixedlist", "box", "box")
-##    def opimpl_list_getitem(self, descr, listbox, indexbox):
-##        args = [descr.getfunc, listbox, indexbox]
-##        return self.execute_with_exc(rop.LIST_GETITEM, args, descr.tp)
-
-##    @arguments("fixedlist", "box", "box", "box")
-##    def opimpl_list_setitem(self, descr, listbox, indexbox, newitembox):
-##        args = [descr.setfunc, listbox, indexbox, newitembox]
-##        return self.execute_with_exc(rop.LIST_SETITEM, args, 'void')
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_getitem_foldable(self, descr, varargs):
-##        args = [descr.getfunc] + varargs
-##        return self.execute_with_exc('getitem', args, descr.tp, True)
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_setitem_foldable(self, descr, varargs):
-##        args = [descr.setfunc] + varargs
-##        return self.execute_with_exc('setitem', args, 'void', True)
-
-##    @arguments("fixedlist", "box", "box")
-##    def opimpl_newlist(self, descr, countbox, defaultbox):
-##        args = [descr.malloc_func, countbox, defaultbox]
-##        return self.execute_with_exc(rop.NEWLIST, args, 'ptr')
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_append(self, descr, varargs):
-##        args = [descr.append_func] + varargs
-##        return self.execute_with_exc('append', args, 'void')
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_insert(self, descr, varargs):
-##        args = [descr.insert_func] + varargs
-##        return self.execute_with_exc('insert', args, 'void')
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_pop(self, descr, varargs):
-##        args = [descr.pop_func] + varargs
-##        return self.execute_with_exc('pop', args, descr.tp)
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_len(self, descr, varargs):
-##        args = [descr.len_func] + varargs
-##        return self.execute_with_exc('len', args, 'int')
-
-##    @arguments("builtin", "varargs")
-##    def opimpl_listnonzero(self, descr, varargs):
-##        args = [descr.nonzero_func] + varargs
-##        return self.execute_with_exc('listnonzero', args, 'int')
+        self.execute_varargs(rop.CALL_PURE, varargs, descr=calldescr, exc=False)
 
 
     @arguments("orgpc", "indirectcallset", "box", "varargs")
@@ -755,55 +698,47 @@
 
     @arguments("box")
     def opimpl_strlen(self, str):
-        self.execute(rop.STRLEN, [str])
+        self.execute(rop.STRLEN, str)
 
     @arguments("box")
     def opimpl_unicodelen(self, str):
-        self.execute(rop.UNICODELEN, [str])
+        self.execute(rop.UNICODELEN, str)
 
     @arguments("box", "box")
     def opimpl_strgetitem(self, str, index):
-        self.execute(rop.STRGETITEM, [str, index])
+        self.execute(rop.STRGETITEM, str, index)
 
     @arguments("box", "box")
     def opimpl_unicodegetitem(self, str, index):
-        self.execute(rop.UNICODEGETITEM, [str, index])
+        self.execute(rop.UNICODEGETITEM, str, index)
 
     @arguments("box", "box", "box")
     def opimpl_strsetitem(self, str, index, newchar):
-        self.execute(rop.STRSETITEM, [str, index, newchar])
+        self.execute(rop.STRSETITEM, str, index, newchar)
 
     @arguments("box", "box", "box")
     def opimpl_unicodesetitem(self, str, index, newchar):
-        self.execute(rop.UNICODESETITEM, [str, index, newchar])
+        self.execute(rop.UNICODESETITEM, str, index, newchar)
 
     @arguments("box")
     def opimpl_newstr(self, length):
-        self.execute(rop.NEWSTR, [length])
+        self.execute(rop.NEWSTR, length)
 
     @arguments("box")
     def opimpl_newunicode(self, length):
-        self.execute(rop.NEWUNICODE, [length])
+        self.execute(rop.NEWUNICODE, length)
 
     @arguments("descr", "varargs")
     def opimpl_residual_oosend_canraise(self, methdescr, varargs):
-        return self.execute_with_exc(rop.OOSEND, varargs, descr=methdescr)
+        return self.execute_varargs(rop.OOSEND, varargs, descr=methdescr, exc=True)
 
     @arguments("descr", "varargs")
     def opimpl_residual_oosend_noraise(self, methdescr, varargs):
-        self.execute(rop.OOSEND, varargs, descr=methdescr)
+        self.execute_varargs(rop.OOSEND, varargs, descr=methdescr, exc=False)
 
     @arguments("descr", "varargs")
     def opimpl_residual_oosend_pure(self, methdescr, boxes):
-        self.execute(rop.OOSEND_PURE, boxes, descr=methdescr)
-
-#    @arguments("box", "box")
-#    def opimpl_oostring_char(self, obj, base):
-#        self.execute(rop.OOSTRING_CHAR, [obj, base])
-#
-#    @arguments("box", "box")
-#    def opimpl_oounicode_unichar(self, obj, base):
-#        self.execute(rop.OOUNICODE_UNICHAR, [obj, base])
+        self.execute_varargs(rop.OOSEND_PURE, boxes, descr=methdescr, exc=False)
 
     @arguments("orgpc", "box")
     def opimpl_guard_value(self, pc, box):
@@ -1010,18 +945,26 @@
         return self.metainterp.cpu.ts.cls_of_box(self.metainterp.cpu, box)
 
     @specialize.arg(1)
-    def execute(self, opnum, argboxes, descr=None):
-        resbox = self.metainterp.execute_and_record(opnum, argboxes, descr)
+    def execute(self, opnum, *argboxes):
+        self.execute_with_descr(opnum, None, *argboxes)
+
+    @specialize.arg(1)
+    def execute_with_descr(self, opnum, descr, *argboxes):
+        resbox = self.metainterp.execute_and_record(opnum, list(argboxes), descr=descr)
         if resbox is not None:
             self.make_result_box(resbox)
 
     @specialize.arg(1)
-    def execute_with_exc(self, opnum, argboxes, descr=None):
-        self.execute(opnum, argboxes, descr)
+    def execute_varargs(self, opnum, argboxes, descr, exc):
+        resbox = self.metainterp.execute_and_record(opnum, list(argboxes), descr=descr)
+        if resbox is not None:
+            self.make_result_box(resbox)
         if not we_are_translated():
             self.metainterp._debug_history.append(['call',
                                                   argboxes[0], argboxes[1:]])
-        return self.metainterp.handle_exception()
+        if exc:
+            return self.metainterp.handle_exception()
+        return False
 
 # ____________________________________________________________
 



More information about the Pypy-commit mailing list