[pypy-commit] pypy arm-backend-2: move the descrs unpacking to llsuport to be shared between the backends
bivab
noreply at buildbot.pypy.org
Fri Dec 30 17:13:03 CET 2011
Author: David Schneider <david.schneider at picle.org>
Branch: arm-backend-2
Changeset: r50961:1348332a6293
Date: 2011-12-30 14:00 +0100
http://bitbucket.org/pypy/pypy/changeset/1348332a6293/
Log: move the descrs unpacking to llsuport to be shared between the
backends
diff --git a/pypy/jit/backend/llsupport/descr.py b/pypy/jit/backend/llsupport/descr.py
--- a/pypy/jit/backend/llsupport/descr.py
+++ b/pypy/jit/backend/llsupport/descr.py
@@ -478,3 +478,31 @@
cache[key] = calldescr
assert repr(calldescr.result_size) == repr(result_size)
return calldescr
+
+
+def unpack_arraydescr(arraydescr):
+ assert isinstance(arraydescr, ArrayDescr)
+ ofs = arraydescr.basesize
+ size = arraydescr.itemsize
+ sign = arraydescr.is_item_signed()
+ return size, ofs, sign
+
+
+def unpack_fielddescr(fielddescr):
+ assert isinstance(fielddescr, FieldDescr)
+ ofs = fielddescr.offset
+ size = fielddescr.field_size
+ sign = fielddescr.is_field_signed()
+ return ofs, size, sign
+unpack_fielddescr._always_inline_ = True
+
+
+def unpack_interiorfielddescr(descr):
+ assert isinstance(descr, InteriorFieldDescr)
+ arraydescr = descr.arraydescr
+ ofs = arraydescr.basesize
+ itemsize = arraydescr.itemsize
+ fieldsize = descr.fielddescr.field_size
+ sign = descr.fielddescr.is_field_signed()
+ ofs += descr.fielddescr.offset
+ return ofs, itemsize, fieldsize, sign
diff --git a/pypy/jit/backend/x86/regalloc.py b/pypy/jit/backend/x86/regalloc.py
--- a/pypy/jit/backend/x86/regalloc.py
+++ b/pypy/jit/backend/x86/regalloc.py
@@ -19,6 +19,9 @@
from pypy.jit.backend.llsupport.descr import FieldDescr, ArrayDescr
from pypy.jit.backend.llsupport.descr import CallDescr, SizeDescr
from pypy.jit.backend.llsupport.descr import InteriorFieldDescr
+from pypy.jit.backend.llsupport.descr import unpack_arraydescr
+from pypy.jit.backend.llsupport.descr import unpack_fielddescr
+from pypy.jit.backend.llsupport.descr import unpack_interiorfielddescr
from pypy.jit.backend.llsupport.regalloc import FrameManager, RegisterManager,\
TempBox, compute_vars_longevity, is_comparison_or_ovf_op
from pypy.jit.backend.x86.arch import WORD, FRAME_FIXED_SIZE
@@ -917,33 +920,11 @@
gc_ll_descr.get_nursery_top_addr(),
size)
- def _unpack_arraydescr(self, arraydescr):
- assert isinstance(arraydescr, ArrayDescr)
- ofs = arraydescr.basesize
- size = arraydescr.itemsize
- sign = arraydescr.is_item_signed()
- return size, ofs, sign
-
- def _unpack_fielddescr(self, fielddescr):
- assert isinstance(fielddescr, FieldDescr)
- ofs = fielddescr.offset
- size = fielddescr.field_size
- sign = fielddescr.is_field_signed()
- return imm(ofs), imm(size), sign
- _unpack_fielddescr._always_inline_ = True
-
- def _unpack_interiorfielddescr(self, descr):
- assert isinstance(descr, InteriorFieldDescr)
- arraydescr = descr.arraydescr
- ofs = arraydescr.basesize
- itemsize = arraydescr.itemsize
- fieldsize = descr.fielddescr.field_size
- sign = descr.fielddescr.is_field_signed()
- ofs += descr.fielddescr.offset
- return imm(ofs), imm(itemsize), imm(fieldsize), sign
def consider_setfield_gc(self, op):
- ofs_loc, size_loc, _ = self._unpack_fielddescr(op.getdescr())
+ ofs, size, _ = unpack_fielddescr(op.getdescr())
+ ofs_loc = imm(ofs)
+ size_loc = imm(size)
assert isinstance(size_loc, ImmedLoc)
if size_loc.value == 1:
need_lower_byte = True
@@ -959,8 +940,8 @@
consider_setfield_raw = consider_setfield_gc
def consider_setinteriorfield_gc(self, op):
- t = self._unpack_interiorfielddescr(op.getdescr())
- ofs, itemsize, fieldsize, _ = t
+ t = unpack_interiorfielddescr(op.getdescr())
+ ofs, itemsize, fieldsize = imm(t[0]), imm(t[1]), imm(t[2])
args = op.getarglist()
if fieldsize.value == 1:
need_lower_byte = True
@@ -1001,7 +982,7 @@
consider_unicodesetitem = consider_strsetitem
def consider_setarrayitem_gc(self, op):
- itemsize, ofs, _ = self._unpack_arraydescr(op.getdescr())
+ itemsize, ofs, _ = unpack_arraydescr(op.getdescr())
args = op.getarglist()
base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
if itemsize == 1:
@@ -1018,7 +999,9 @@
consider_setarrayitem_raw = consider_setarrayitem_gc
def consider_getfield_gc(self, op):
- ofs_loc, size_loc, sign = self._unpack_fielddescr(op.getdescr())
+ ofs, size, sign = unpack_fielddescr(op.getdescr())
+ ofs_loc = imm(ofs)
+ size_loc = imm(size)
args = op.getarglist()
base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
self.rm.possibly_free_vars(args)
@@ -1034,7 +1017,7 @@
consider_getfield_gc_pure = consider_getfield_gc
def consider_getarrayitem_gc(self, op):
- itemsize, ofs, sign = self._unpack_arraydescr(op.getdescr())
+ itemsize, ofs, sign = unpack_arraydescr(op.getdescr())
args = op.getarglist()
base_loc = self.rm.make_sure_var_in_reg(op.getarg(0), args)
ofs_loc = self.rm.make_sure_var_in_reg(op.getarg(1), args)
@@ -1051,8 +1034,8 @@
consider_getarrayitem_gc_pure = consider_getarrayitem_gc
def consider_getinteriorfield_gc(self, op):
- t = self._unpack_interiorfielddescr(op.getdescr())
- ofs, itemsize, fieldsize, sign = t
+ t = unpack_interiorfielddescr(op.getdescr())
+ ofs, itemsize, fieldsize, sign = imm(t[0]), imm(t[1]), imm(t[2]), t[3]
if sign:
sign_loc = imm1
else:
More information about the pypy-commit
mailing list