[pypy-svn] r31851 - pypy/dist/pypy/jit/timeshifter

arigo at codespeak.net arigo at codespeak.net
Wed Aug 30 21:13:14 CEST 2006


Author: arigo
Date: Wed Aug 30 21:13:13 2006
New Revision: 31851

Modified:
   pypy/dist/pypy/jit/timeshifter/oop.py
   pypy/dist/pypy/jit/timeshifter/rtimeshift.py
   pypy/dist/pypy/jit/timeshifter/rtyper.py
   pypy/dist/pypy/jit/timeshifter/vlist.py
Log:
(pedronis, arigo)

Refactored vlist to no longer use the obscure listbuilder in rlist.py.
The listbuilder could be killed soonish...


Modified: pypy/dist/pypy/jit/timeshifter/oop.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/oop.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/oop.py	Wed Aug 30 21:13:13 2006
@@ -11,7 +11,7 @@
 class OopSpecDesc:
     __metaclass__ = cachedtype
 
-    def __init__(self, RGenOp, fnobj):
+    def __init__(self, hrtyper, fnobj):
         ll_func = fnobj._callable
         FUNCTYPE = lltype.typeOf(fnobj)
         nb_args = len(FUNCTYPE.ARGS)
@@ -36,14 +36,15 @@
             ARGTYPE = FUNCTYPE.ARGS[i]
             assert ((i+1) in self.argpositions) == (ARGTYPE is not lltype.Void)
 
-        self.args_gv = [RGenOp.placeholder(None)] * nb_args
+        RGenOp = hrtyper.RGenOp
+        self.args_gv = [None] * nb_args
         self.args_gv.insert(0, RGenOp.constPrebuiltGlobal(fnobj._as_ptr()))
         self.result_kind = RGenOp.kindToken(FUNCTYPE.RESULT)
         self.redboxbuilder = rvalue.ll_redboxbuilder(FUNCTYPE.RESULT)
 
         if operation_name == 'newlist':
             from pypy.jit.timeshifter.vlist import ListTypeDesc, oop_newlist
-            self.typedesc = ListTypeDesc(RGenOp, FUNCTYPE.RESULT.TO)
+            self.typedesc = ListTypeDesc(hrtyper, FUNCTYPE.RESULT.TO)
             self.ll_handler = oop_newlist
         else:
             typename, method = operation_name.split('.')

Modified: pypy/dist/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtimeshift.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/rtimeshift.py	Wed Aug 30 21:13:13 2006
@@ -302,9 +302,9 @@
         return self.rgenop.genconst(llvalue)
     genconst._annspecialcase_ = 'specialize:genconst(1)'
 
-    def genvoidconst(self, dummy):
-        return self.rgenop.placeholder(dummy)
-    genvoidconst._annspecialcase_ = 'specialize:arg(1)'
+##    def genvoidconst(self, dummy):
+##        return self.rgenop.placeholder(dummy)
+##    genvoidconst._annspecialcase_ = 'specialize:arg(1)'
 
     def genop(self, opname, args_gv, result_kind=None):
         return self.block.genop(opname, args_gv, result_kind)

Modified: pypy/dist/pypy/jit/timeshifter/rtyper.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtyper.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/rtyper.py	Wed Aug 30 21:13:13 2006
@@ -262,7 +262,7 @@
 
     def handle_highlevel_operation(self, fnobj, hop):
         from pypy.jit.timeshifter.oop import OopSpecDesc, Index
-        oopspecdesc = OopSpecDesc(self.RGenOp, fnobj)
+        oopspecdesc = OopSpecDesc(self, fnobj)
 
         args_v = []
         for obj in oopspecdesc.argtuple:

Modified: pypy/dist/pypy/jit/timeshifter/vlist.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/vlist.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/vlist.py	Wed Aug 30 21:13:13 2006
@@ -6,12 +6,22 @@
 class ListTypeDesc(object):
     __metaclass__ = cachedtype
 
-    def __init__(self, RGenOp, LIST):
+    def __init__(self, hrtyper, LIST):
+        RGenOp = hrtyper.RGenOp
+        rtyper = hrtyper.timeshifter.rtyper
         self.LIST = LIST
         self.LISTPTR = lltype.Ptr(LIST)
         self.ptrkind = RGenOp.kindToken(self.LISTPTR)
-        self.build_newlist = LIST.list_builder.build_newlist
-        self.build_setitem = LIST.list_builder.build_setitem
+
+        argtypes = [lltype.Signed]
+        ll_newlist_ptr = rtyper.annotate_helper_fn(LIST.ll_newlist,
+                                                   argtypes)
+        self.gv_ll_newlist = RGenOp.constPrebuiltGlobal(ll_newlist_ptr)
+
+        argtypes = [self.LISTPTR, lltype.Signed, LIST.ITEM]
+        ll_setitem_fast = rtyper.annotate_helper_fn(LIST.ll_setitem_fast,
+                                                    argtypes)
+        self.gv_ll_setitem_fast = RGenOp.constPrebuiltGlobal(ll_setitem_fast)
 
     def factory(self, length, itembox):
         vlist = VirtualList(self, length, itembox)
@@ -73,12 +83,16 @@
         typedesc = self.typedesc
         boxes = self.item_boxes
         self.item_boxes = None
-        gv_list = typedesc.build_newlist(builder, len(boxes))
+
+        args_gv = [typedesc.gv_ll_newlist, None, builder.genconst(len(boxes))]
+        gv_list = builder.genop('direct_call', args_gv, typedesc.ptrkind)
         self.ownbox.genvar = gv_list
         self.ownbox.content = None
         for i in range(len(boxes)):
             gv_item = boxes[i].getgenvar(builder)
-            typedesc.build_setitem(builder, gv_list, i, gv_item)
+            args_gv = [typedesc.gv_ll_setitem_fast, gv_list,
+                       builder.genconst(i), gv_item]
+            builder.genop('direct_call', args_gv)
 
     def freeze(self, memo):
         contmemo = memo.containers



More information about the Pypy-commit mailing list