[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