[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