Author: Antonio Cuni <[email protected]>
Branch: ffistruct
Changeset: r47186:4e3a2c7b46cb
Date: 2011-09-09 16:49 +0200
http://bitbucket.org/pypy/pypy/changeset/4e3a2c7b46cb/
Log: implement fielddescrof_dynamic for the ll 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
@@ -113,6 +113,17 @@
def repr_of_descr(self):
return '<%s %s %s>' % (self._clsname, self.name, self.offset)
+class DynamicFieldDescr(BaseFieldDescr):
+
+ def __init__(self, offset, fieldsize, is_pointer, is_float, is_signed):
+ self.offset = offset
+ self._fieldsize = fieldsize
+ self._is_pointer_field = is_pointer
+ self._is_float_field = is_float
+ self._is_field_signed = is_signed
+
+ def get_field_size(self, translate_support_code):
+ return self._fieldsize
class NonGcPtrFieldDescr(BaseFieldDescr):
_clsname = 'NonGcPtrFieldDescr'
diff --git a/pypy/jit/backend/llsupport/llmodel.py
b/pypy/jit/backend/llsupport/llmodel.py
--- a/pypy/jit/backend/llsupport/llmodel.py
+++ b/pypy/jit/backend/llsupport/llmodel.py
@@ -13,6 +13,7 @@
from pypy.jit.backend.llsupport.symbolic import WORD, unroll_basic_sizes
from pypy.jit.backend.llsupport.descr import get_size_descr, BaseSizeDescr
from pypy.jit.backend.llsupport.descr import get_field_descr, BaseFieldDescr
+from pypy.jit.backend.llsupport.descr import DynamicFieldDescr
from pypy.jit.backend.llsupport.descr import get_array_descr, BaseArrayDescr
from pypy.jit.backend.llsupport.descr import get_call_descr
from pypy.jit.backend.llsupport.descr import BaseIntCallDescr, GcPtrCallDescr
@@ -225,6 +226,9 @@
def fielddescrof(self, STRUCT, fieldname):
return get_field_descr(self.gc_ll_descr, STRUCT, fieldname)
+ def fielddescrof_dynamic(self, offset, fieldsize, is_pointer, is_float,
is_signed):
+ return DynamicFieldDescr(offset, fieldsize, is_pointer, is_float,
is_signed)
+
def unpack_fielddescr(self, fielddescr):
assert isinstance(fielddescr, BaseFieldDescr)
return fielddescr.offset
diff --git a/pypy/jit/backend/test/runner_test.py
b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -1529,8 +1529,7 @@
assert field.is_pointer_field() == field_dyn.is_pointer_field()
assert field.is_float_field() == field_dyn.is_float_field()
if 'llgraph' not in str(self.cpu):
- assert field.is_signed_field() == field_dyn.is_signed_field()
- assert field.get_field_size() == field_dyn.get_field_size()
+ assert field.is_field_signed() == field_dyn.is_field_signed()
#
for get_op, set_op in ((rop.GETFIELD_RAW, rop.SETFIELD_RAW),
diff --git a/pypy/jit/metainterp/test/test_fficall.py
b/pypy/jit/metainterp/test/test_fficall.py
--- a/pypy/jit/metainterp/test/test_fficall.py
+++ b/pypy/jit/metainterp/test/test_fficall.py
@@ -115,4 +115,3 @@
setfield_raw=1,
getfield_raw=1,
call=0)
-
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit