[pypy-svn] r62470 - pypy/branch/pyjitpl5/pypy/jit/metainterp
arigo at codespeak.net
arigo at codespeak.net
Tue Mar 3 14:14:20 CET 2009
Author: arigo
Date: Tue Mar 3 14:14:18 2009
New Revision: 62470
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
Log:
Add opimpl_getarrayitem_foldable_gc.
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/codewriter.py Tue Mar 3 14:14:18 2009
@@ -736,17 +736,13 @@
self.register_var(op.result)
return True
#
- if (oopspec_name == 'list.getitem' or
- oopspec_name == 'list.getitem_foldable'): # <- XXX do better here
- index = self.prepare_list_getset(op, arraydescr, args)
- if index is None:
- return False
- self.emit('getarrayitem_gc')
- self.emit(self.var_position(args[0]))
- self.emit(self.const_position(arraydescr))
- self.emit(self.var_position(index))
- self.register_var(op.result)
- return True
+ if oopspec_name == 'list.getitem':
+ return self.handle_list_getitem(op, arraydescr, args,
+ 'getarrayitem_gc')
+ #
+ if oopspec_name == 'list.getitem_foldable':
+ return self.handle_list_getitem(op, arraydescr, args,
+ 'getarrayitem_foldable_gc')
#
if oopspec_name == 'list.setitem':
index = self.prepare_list_getset(op, arraydescr, args)
@@ -770,6 +766,17 @@
#
return False
+ def handle_list_getitem(self, op, arraydescr, args, opname):
+ index = self.prepare_list_getset(op, arraydescr, args)
+ if index is None:
+ return False
+ self.emit(opname)
+ self.emit(self.var_position(args[0]))
+ self.emit(self.const_position(arraydescr))
+ self.emit(self.var_position(index))
+ self.register_var(op.result)
+ return True
+
def prepare_list_getset(self, op, arraydescr, args):
func = op.args[0].value._obj._callable # xxx break of abstraction
non_negative = '_nonneg' in func.__name__
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/pyjitpl.py Tue Mar 3 14:14:18 2009
@@ -327,6 +327,12 @@
tp = self.metainterp.cpu.typefor(arraydesc.getint())
self.execute(rop.GETARRAYITEM_GC, [arraybox, arraydesc, indexbox], tp)
+ @arguments("box", "constbox", "box")
+ def opimpl_getarrayitem_foldable_gc(self, arraybox, arraydesc, indexbox):
+ tp = self.metainterp.cpu.typefor(arraydesc.getint())
+ self.execute(rop.GETARRAYITEM_GC, [arraybox, arraydesc, indexbox], tp,
+ True)
+
@arguments("box", "constbox", "box", "box")
def opimpl_setarrayitem_gc(self, arraybox, arraydesc, indexbox, itembox):
self.execute(rop.SETARRAYITEM_GC, [arraybox, arraydesc,
More information about the Pypy-commit
mailing list