[pypy-svn] r74666 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test

arigo at codespeak.net arigo at codespeak.net
Sat May 22 10:15:14 CEST 2010


Author: arigo
Date: Sat May 22 10:15:11 2010
New Revision: 74666

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py
Log:
The fixed list part.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/jtransform.py	Sat May 22 10:15:11 2010
@@ -710,22 +710,6 @@
         else:
             return meth(op, args, *descrs)
 
-    def do_fixed_newlist(self, op, args, arraydescr):
-        # normalize number of arguments
-        if len(args) < 1:
-            args.append(Constant(0, lltype.Signed))
-        if len(args) > 1:
-            v_default = args[1]
-            ARRAY = deref(op.result.concretetype)
-            if (not isinstance(v_default, Constant) or
-                v_default.value != arrayItem(ARRAY)._defl()):
-                return None     # variable or non-null initial value
-        return SpaceOperation('new_array', [arraydescr, args[0]], op.result)
-
-    def do_fixed_list_len(self, op, args, arraydescr):
-        return SpaceOperation('arraylen_gc', [args[0], arraydescr], op.result)
-
-    do_fixed_list_len_foldable = do_fixed_list_len
 
     def _get_list_nonneg_canraise_flags(self, op):
         # xxx break of abstraction:
@@ -757,6 +741,25 @@
                                             descr, args[1]], v_posindex)
             return v_posindex, [op]
 
+    # ---------- fixed lists ----------
+
+    def do_fixed_newlist(self, op, args, arraydescr):
+        # normalize number of arguments
+        if len(args) < 1:
+            args.append(Constant(0, lltype.Signed))
+        if len(args) > 1:
+            v_default = args[1]
+            ARRAY = deref(op.result.concretetype)
+            if (not isinstance(v_default, Constant) or
+                v_default.value != arrayItem(ARRAY)._defl()):
+                return None     # variable or non-null initial value
+        return SpaceOperation('new_array', [arraydescr, args[0]], op.result)
+
+    def do_fixed_list_len(self, op, args, arraydescr):
+        return SpaceOperation('arraylen_gc', [args[0], arraydescr], op.result)
+
+    do_fixed_list_len_foldable = do_fixed_list_len
+
     def do_fixed_list_getitem(self, op, args, arraydescr, pure=False):
         v_index, extraop = self._prepare_list_getset(op, arraydescr, args,
                                                      'check_neg_index')
@@ -782,6 +785,16 @@
                             [args[0], arraydescr, v_index, args[2]], None)
         return extraop + [op]
 
+    def do_fixed_list_ll_arraycopy(self, op, args, arraydescr):
+        calldescr = self.callcontrol.getcalldescr(op)
+        return SpaceOperation('arraycopy',
+                              [calldescr, op.args[0]] + args + [arraydescr],
+                              op.result)
+
+    # ---------- resizable lists ----------
+
+    # xxx
+
     # ----------
     # VirtualRefs.
 

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_list.py	Sat May 22 10:15:11 2010
@@ -19,9 +19,16 @@
         def __repr__(self):
             return '<ArrayDescr>'
 
+class FakeCallControl:
+    class getcalldescr(AbstractDescr):
+        def __init__(self, op):
+            self.op = op
+        def __repr__(self):
+            return '<CallDescr>'
+
 def builtin_test(oopspec_name, args, RESTYPE, expected):
     v_result = varoftype(RESTYPE)
-    tr = Transformer(FakeCPU())
+    tr = Transformer(FakeCPU(), FakeCallControl())
     if '/' in oopspec_name:
         oopspec_name, property = oopspec_name.split('/')
         def force_flags(op):
@@ -30,7 +37,8 @@
             if property == 'CANRAISE': return False, True
             raise ValueError(property)
         tr._get_list_nonneg_canraise_flags = force_flags
-    op = SpaceOperation('direct_call', [Constant("myfunc")] + args,
+    op = SpaceOperation('direct_call',
+                        [Constant("myfunc", lltype.Void)] + args,
                         v_result)
     oplist = tr._handle_list_call(op, oopspec_name, args)
     if expected is None:
@@ -62,7 +70,15 @@
                              varoftype(lltype.Signed)], FIXEDLIST, None)
 
 def test_fixed_ll_arraycopy():
-    xxx
+    builtin_test('list.ll_arraycopy',
+                 [varoftype(FIXEDLIST),
+                  varoftype(FIXEDLIST),
+                  varoftype(lltype.Signed), 
+                  varoftype(lltype.Signed), 
+                  varoftype(lltype.Signed)],
+                 lltype.Void, """
+                     arraycopy <CallDescr>, $'myfunc', %r0, %r1, %i0, %i1, %i2, <ArrayDescr>
+                 """)
 
 def test_fixed_getitem():
     builtin_test('list.getitem/NONNEG',



More information about the Pypy-commit mailing list