[pypy-svn] r74878 - in pypy/branch/blackhole-improvement/pypy/jit: backend/llsupport backend/llsupport/test backend/x86 backend/x86/test metainterp
arigo at codespeak.net
arigo at codespeak.net
Fri May 28 22:45:36 CEST 2010
Author: arigo
Date: Fri May 28 22:45:34 2010
New Revision: 74878
Modified:
pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/descr.py
pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py
pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/test/test_descr.py
pypy/branch/blackhole-improvement/pypy/jit/backend/x86/assembler.py
pypy/branch/blackhole-improvement/pypy/jit/backend/x86/runner.py
pypy/branch/blackhole-improvement/pypy/jit/backend/x86/test/test_assembler.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py
Log:
Still in-progress...
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/descr.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/descr.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/descr.py Fri May 28 22:45:34 2010
@@ -190,18 +190,8 @@
def get_extra_info(self):
return self.extrainfo
- _returns_a_pointer = False # unless overridden by GcPtrCallDescr
- _returns_a_float = False # unless overridden by FloatCallDescr
- _returns_a_void = False # unless overridden by VoidCallDescr
-
- def returns_a_pointer(self):
- return self._returns_a_pointer
-
- def returns_a_float(self):
- return self._returns_a_float
-
- def returns_a_void(self):
- return self._returns_a_void
+ def get_return_type(self):
+ return self._return_type
def get_result_size(self, translate_support_code):
raise NotImplementedError
@@ -225,14 +215,16 @@
seen = {'i': 0, 'r': 0, 'f': 0}
args = ", ".join([process(c) for c in self.arg_classes])
- if self.returns_a_pointer():
+ if self.get_return_type() == history.INT:
+ result = 'rffi.cast(lltype.Signed, res)'
+ elif self.get_return_type() == history.REF:
result = 'lltype.cast_opaque_ptr(llmemory.GCREF, res)'
- elif self.returns_a_float():
+ elif self.get_return_type() == history.FLOAT:
result = 'res'
- elif self.returns_a_void():
+ elif self.get_return_type() == history.VOID:
result = 'None'
else:
- result = 'rffi.cast(lltype.Signed, res)'
+ assert 0
source = py.code.Source("""
def call_stub(func, args_i, args_r, args_f):
fnptr = rffi.cast(lltype.Ptr(FUNC), func)
@@ -247,9 +239,7 @@
self.call_stub = d['call_stub']
def verify_types(self, args_i, args_r, args_f, return_type):
- assert self._returns_a_pointer == (return_type == 'ref')
- assert self._returns_a_float == (return_type == 'float')
- assert self._returns_a_void == (return_type == 'void')
+ assert self._return_type == return_type
assert self.arg_classes.count('i') == len(args_i or ())
assert self.arg_classes.count('r') == len(args_r or ())
assert self.arg_classes.count('f') == len(args_f or ())
@@ -268,7 +258,7 @@
#
# The purpose of BaseIntCallDescr is to be the parent of all classes
# in which 'call_stub' has a return kind of 'int'.
- pass
+ _return_type = history.INT
class NonGcPtrCallDescr(BaseIntCallDescr):
_clsname = 'NonGcPtrCallDescr'
@@ -277,19 +267,19 @@
class GcPtrCallDescr(BaseCallDescr):
_clsname = 'GcPtrCallDescr'
- _returns_a_pointer = True
+ _return_type = history.REF
def get_result_size(self, translate_support_code):
return symbolic.get_size_of_ptr(translate_support_code)
class FloatCallDescr(BaseCallDescr):
_clsname = 'FloatCallDescr'
- _returns_a_float = True
+ _return_type = history.FLOAT
def get_result_size(self, translate_support_code):
return symbolic.get_size(lltype.Float, translate_support_code)
class VoidCallDescr(BaseCallDescr):
_clsname = 'VoidCallDescr'
- _returns_a_void = True
+ _return_type = history.VOID
def get_result_size(self, translate_support_code):
return 0
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/llmodel.py Fri May 28 22:45:34 2010
@@ -6,6 +6,7 @@
from pypy.rlib.objectmodel import we_are_translated, specialize
from pypy.jit.metainterp.history import BoxInt, BoxPtr, set_future_values,\
BoxFloat
+from pypy.jit.metainterp import history
from pypy.jit.backend.model import AbstractCPU
from pypy.jit.backend.llsupport import symbolic
from pypy.jit.backend.llsupport.symbolic import WORD, unroll_basic_sizes
@@ -440,25 +441,25 @@
def bh_call_i(self, func, calldescr, args_i, args_r, args_f):
assert isinstance(calldescr, BaseIntCallDescr)
if not we_are_translated():
- calldescr.verify_types(args_i, args_r, args_f, 'int')
+ calldescr.verify_types(args_i, args_r, args_f, history.INT)
return calldescr.call_stub(func, args_i, args_r, args_f)
def bh_call_r(self, func, calldescr, args_i, args_r, args_f):
assert isinstance(calldescr, GcPtrCallDescr)
if not we_are_translated():
- calldescr.verify_types(args_i, args_r, args_f, 'ref')
+ calldescr.verify_types(args_i, args_r, args_f, history.REF)
return calldescr.call_stub(func, args_i, args_r, args_f)
def bh_call_f(self, func, calldescr, args_i, args_r, args_f):
assert isinstance(calldescr, FloatCallDescr)
if not we_are_translated():
- calldescr.verify_types(args_i, args_r, args_f, 'float')
+ calldescr.verify_types(args_i, args_r, args_f, history.FLOAT)
return calldescr.call_stub(func, args_i, args_r, args_f)
def bh_call_v(self, func, calldescr, args_i, args_r, args_f):
assert isinstance(calldescr, VoidCallDescr)
if not we_are_translated():
- calldescr.verify_types(args_i, args_r, args_f, 'void')
+ calldescr.verify_types(args_i, args_r, args_f, history.VOID)
return calldescr.call_stub(func, args_i, args_r, args_f)
def bh_cast_ptr_to_int(self, ptr):
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/test/test_descr.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/test/test_descr.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/llsupport/test/test_descr.py Fri May 28 22:45:34 2010
@@ -4,6 +4,7 @@
from pypy.rlib.objectmodel import Symbolic
from pypy.rpython.annlowlevel import llhelper
from pypy.jit.metainterp.history import BoxInt, BoxFloat, BoxPtr
+from pypy.jit.metainterp import history
def test_get_size_descr():
c0 = GcCache(False)
@@ -145,31 +146,28 @@
c0 = GcCache(False)
descr1 = get_call_descr(c0, [lltype.Char, lltype.Signed], lltype.Char)
assert descr1.get_result_size(False) == rffi.sizeof(lltype.Char)
- assert not descr1.returns_a_pointer()
- assert not descr1.returns_a_float()
+ assert descr1.get_return_type() == history.INT
assert descr1.arg_classes == "ii"
#
T = lltype.GcStruct('T')
descr2 = get_call_descr(c0, [lltype.Ptr(T)], lltype.Ptr(T))
assert descr2.get_result_size(False) == rffi.sizeof(lltype.Ptr(T))
- assert descr2.returns_a_pointer()
- assert not descr2.returns_a_float()
- assert not descr2.returns_a_void()
+ assert descr2.get_return_type() == history.REF
assert descr2.arg_classes == "r"
#
U = lltype.GcStruct('U', ('x', lltype.Signed))
assert descr2 == get_call_descr(c0, [lltype.Ptr(U)], lltype.Ptr(U))
#
V = lltype.Struct('V', ('x', lltype.Signed))
- assert not get_call_descr(c0, [], lltype.Ptr(V)).returns_a_pointer()
+ assert (get_call_descr(c0, [], lltype.Ptr(V)).get_return_type() ==
+ history.INT)
#
- assert get_call_descr(c0, [], lltype.Void).returns_a_void()
+ assert (get_call_descr(c0, [], lltype.Void).get_return_type() ==
+ history.VOID)
#
descr4 = get_call_descr(c0, [lltype.Float, lltype.Float], lltype.Float)
assert descr4.get_result_size(False) == rffi.sizeof(lltype.Float)
- assert not descr4.returns_a_pointer()
- assert descr4.returns_a_float()
- assert not descr4.returns_a_void()
+ assert descr4.get_return_type() == history.FLOAT
assert descr4.arg_classes == "ff"
def test_get_call_descr_translated():
@@ -178,14 +176,12 @@
U = lltype.GcStruct('U', ('x', lltype.Signed))
descr3 = get_call_descr(c1, [lltype.Ptr(T)], lltype.Ptr(U))
assert isinstance(descr3.get_result_size(True), Symbolic)
- assert descr3.returns_a_pointer()
- assert not descr3.returns_a_float()
+ assert descr3.get_return_type() == history.REF
assert descr3.arg_classes == "r"
#
descr4 = get_call_descr(c1, [lltype.Float, lltype.Float], lltype.Float)
assert isinstance(descr4.get_result_size(True), Symbolic)
- assert not descr4.returns_a_pointer()
- assert descr4.returns_a_float()
+ assert descr4.get_return_type() == history.FLOAT
assert descr4.arg_classes == "ff"
def test_call_descr_extra_info():
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/x86/assembler.py Fri May 28 22:45:34 2010
@@ -1188,6 +1188,7 @@
#
if not we_are_translated():
assert bytecode[4] == 0xCC
+ self.fail_boxes_count = num
fail_index = rffi.cast(rffi.LONGP, bytecode)[0]
return fail_index
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/x86/runner.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/x86/runner.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/x86/runner.py Fri May 28 22:45:34 2010
@@ -73,7 +73,7 @@
return self.assembler.fail_boxes_ptr.getitem(index)
def get_latest_value_count(self):
- XXX
+ return self.assembler.fail_boxes_count
def clear_latest_values(self, count):
setitem = self.assembler.fail_boxes_ptr.setitem
Modified: pypy/branch/blackhole-improvement/pypy/jit/backend/x86/test/test_assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/backend/x86/test/test_assembler.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/backend/x86/test/test_assembler.py Fri May 28 22:45:34 2010
@@ -75,35 +75,6 @@
assert ([loc.assembler() for loc in newlocs] ==
[loc.assembler() for loc in locs if loc is not None])
- # finally, test make_boxes_from_latest_values(), which should
- # reproduce the holes
- expected_classes = [BoxInt, BoxPtr, BoxFloat,
- BoxInt, BoxPtr, BoxFloat,
- type(None), type(None),
- BoxInt, BoxPtr, BoxFloat]
- ptrvalues = {}
- S = lltype.GcStruct('S')
- for i, cls in enumerate(expected_classes):
- if cls == BoxInt:
- assembler.fail_boxes_int.setitem(i, 1000 + i)
- elif cls == BoxPtr:
- s = lltype.malloc(S)
- s_ref = lltype.cast_opaque_ptr(llmemory.GCREF, s)
- ptrvalues[i] = s_ref
- assembler.fail_boxes_ptr.setitem(i, s_ref)
- elif cls == BoxFloat:
- assembler.fail_boxes_float.setitem(i, 42.5 + i)
- boxes = assembler.make_boxes_from_latest_values(bytecode_addr)
- assert len(boxes) == len(locs) == len(expected_classes)
- for i, (box, expected_class) in enumerate(zip(boxes, expected_classes)):
- assert type(box) is expected_class
- if expected_class == BoxInt:
- assert box.value == 1000 + i
- elif expected_class == BoxPtr:
- assert box.value == ptrvalues[i]
- elif expected_class == BoxFloat:
- assert box.value == 42.5 + i
-
# ____________________________________________________________
def test_failure_recovery_func_no_floats():
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/executor.py Fri May 28 22:45:34 2010
@@ -8,7 +8,7 @@
from pypy.rlib.rarithmetic import ovfcheck, r_uint, intmask
from pypy.rlib.unroll import unrolling_iterable
from pypy.jit.metainterp.history import BoxInt, BoxPtr, BoxFloat, check_descr
-from pypy.jit.metainterp.history import INT, REF, FLOAT, AbstractDescr
+from pypy.jit.metainterp.history import INT, REF, FLOAT, VOID, AbstractDescr
from pypy.jit.metainterp import resoperation
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp.blackhole import BlackholeInterpreter, NULL
@@ -75,7 +75,7 @@
else:
metainterp.execute_did_not_raise()
return BoxFloat(result)
- if rettype == 'v': # void
+ if rettype == VOID:
try:
cpu.bh_call_v(func, descr, args_i, args_r, args_f)
except Exception, e:
Modified: pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/blackhole-improvement/pypy/jit/metainterp/history.py Fri May 28 22:45:34 2010
@@ -16,6 +16,7 @@
REF = 'r'
FLOAT = 'f'
HOLE = '_'
+VOID = 'v'
FAILARGS_LIMIT = 1000
More information about the Pypy-commit
mailing list