[pypy-svn] r70775 - in pypy/branch/direct-assembler-call/pypy/jit: backend/x86 backend/x86/test metainterp/test
fijal at codespeak.net
fijal at codespeak.net
Fri Jan 22 14:05:03 CET 2010
Author: fijal
Date: Fri Jan 22 14:05:03 2010
New Revision: 70775
Modified:
pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py
pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py
pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py
pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py
Log:
fix a variety of tests
Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py (original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/assembler.py Fri Jan 22 14:05:03 2010
@@ -120,10 +120,13 @@
ll_new_unicode = gc_ll_descr.get_funcptr_for_newunicode()
self.malloc_unicode_func_addr = rffi.cast(lltype.Signed,
ll_new_unicode)
- if self.cpu.assembler_helper_ptr:
+ if we_are_translated():
self.assembler_helper_adr = self.cpu.cast_ptr_to_int(
self.cpu.assembler_helper_ptr)
-
+ else:
+ if getattr(self.cpu, 'assembler_helper_ptr', None):
+ self.assembler_helper_adr = self.cpu.cast_ptr_to_int(
+ self.cpu.assembler_helper_ptr)
# done
# we generate the loop body in 'mc'
Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py (original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_runner.py Fri Jan 22 14:05:03 2010
@@ -27,7 +27,6 @@
def setup_method(self, meth):
self.cpu = CPU(rtyper=None, stats=FakeStats())
- self.cpu.assembler_helper_ptr = None
def test_execute_ptr_operation(self):
cpu = self.cpu
@@ -73,45 +72,41 @@
func = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_int)(f)
addr = ctypes.cast(func, ctypes.c_void_p).value
- try:
- saved_addr = self.cpu.assembler.malloc_func_addr
- self.cpu.assembler.malloc_func_addr = addr
- ofs = symbolic.get_field_token(rstr.STR, 'chars', False)[0]
-
- res = self.execute_operation(rop.NEWSTR, [ConstInt(7)], 'ref')
- assert allocs[0] == 7 + ofs + WORD
- resbuf = self._resbuf(res)
- assert resbuf[ofs/WORD] == 7
-
- # ------------------------------------------------------------
-
- res = self.execute_operation(rop.NEWSTR, [BoxInt(7)], 'ref')
- assert allocs[0] == 7 + ofs + WORD
- resbuf = self._resbuf(res)
- assert resbuf[ofs/WORD] == 7
-
- # ------------------------------------------------------------
-
- TP = lltype.GcArray(lltype.Signed)
- ofs = symbolic.get_field_token(TP, 'length', False)[0]
- descr = self.cpu.arraydescrof(TP)
-
- res = self.execute_operation(rop.NEW_ARRAY, [ConstInt(10)],
- 'ref', descr)
- assert allocs[0] == 10*WORD + ofs + WORD
- resbuf = self._resbuf(res)
- assert resbuf[ofs/WORD] == 10
-
- # ------------------------------------------------------------
-
- res = self.execute_operation(rop.NEW_ARRAY, [BoxInt(10)],
- 'ref', descr)
- assert allocs[0] == 10*WORD + ofs + WORD
- resbuf = self._resbuf(res)
- assert resbuf[ofs/WORD] == 10
-
- finally:
- self.cpu.assembler.malloc_func_addr = saved_addr
+ self.cpu.assembler.make_sure_mc_exists()
+ self.cpu.assembler.malloc_func_addr = addr
+ ofs = symbolic.get_field_token(rstr.STR, 'chars', False)[0]
+
+ res = self.execute_operation(rop.NEWSTR, [ConstInt(7)], 'ref')
+ assert allocs[0] == 7 + ofs + WORD
+ resbuf = self._resbuf(res)
+ assert resbuf[ofs/WORD] == 7
+
+ # ------------------------------------------------------------
+
+ res = self.execute_operation(rop.NEWSTR, [BoxInt(7)], 'ref')
+ assert allocs[0] == 7 + ofs + WORD
+ resbuf = self._resbuf(res)
+ assert resbuf[ofs/WORD] == 7
+
+ # ------------------------------------------------------------
+
+ TP = lltype.GcArray(lltype.Signed)
+ ofs = symbolic.get_field_token(TP, 'length', False)[0]
+ descr = self.cpu.arraydescrof(TP)
+
+ res = self.execute_operation(rop.NEW_ARRAY, [ConstInt(10)],
+ 'ref', descr)
+ assert allocs[0] == 10*WORD + ofs + WORD
+ resbuf = self._resbuf(res)
+ assert resbuf[ofs/WORD] == 10
+
+ # ------------------------------------------------------------
+
+ res = self.execute_operation(rop.NEW_ARRAY, [BoxInt(10)],
+ 'ref', descr)
+ assert allocs[0] == 10*WORD + ofs + WORD
+ resbuf = self._resbuf(res)
+ assert resbuf[ofs/WORD] == 10
def test_stringitems(self):
from pypy.rpython.lltypesystem.rstr import STR
@@ -318,9 +313,9 @@
class TestX86OverflowMC(TestX86):
- def setup_class(cls):
- cls.cpu = CPU(rtyper=None, stats=FakeStats())
- cls.cpu.assembler.mc_size = 1024
+ def setup_method(self, meth):
+ self.cpu = CPU(rtyper=None, stats=FakeStats())
+ self.cpu.assembler.mc_size = 1024
def test_overflow_mc(self):
ops = []
@@ -333,6 +328,7 @@
ops.append(ResOperation(rop.FINISH, [v], None,
descr=BasicFailDescr()))
looptoken = LoopToken()
+ self.cpu.assembler.make_sure_mc_exists()
old_mc_mc = self.cpu.assembler.mc._mc
self.cpu.compile_loop([base_v], ops, looptoken)
assert self.cpu.assembler.mc._mc != old_mc_mc # overflowed
Modified: pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py (original)
+++ pypy/branch/direct-assembler-call/pypy/jit/backend/x86/test/test_ztranslation.py Fri Jan 22 14:05:03 2010
@@ -4,6 +4,7 @@
from pypy.jit.metainterp.jitprof import Profiler
from pypy.jit.backend.x86.runner import CPU386
from pypy.jit.backend.test.support import CCompiledMixin
+from pypy.jit.metainterp.policy import StopAtXPolicy
class TestTranslationX86(CCompiledMixin):
CPUClass = CPU386
@@ -94,3 +95,52 @@
return total * 10
res = self.meta_interp(main, [40])
assert res == main(40)
+
+ def test_direct_assembler_call_translates(self):
+ class Thing(object):
+ def __init__(self, val):
+ self.val = val
+
+ class Frame(object):
+ _virtualizable2_ = ['thing']
+
+ driver = JitDriver(greens = ['codeno'], reds = ['frame', 'i'],
+ virtualizables = ['frame'],
+ get_printable_location = lambda codeno : str(codeno),
+ can_inline = lambda codeno : False)
+ class SomewhereElse(object):
+ pass
+
+ somewhere_else = SomewhereElse()
+
+ def change(newthing):
+ somewhere_else.frame.thing = newthing
+
+ def main(codeno):
+ frame = Frame()
+ somewhere_else.frame = frame
+ frame.thing = Thing(0)
+ portal(codeno, frame)
+ return frame.thing.val
+
+ def portal(codeno, frame):
+ i = 0
+ while i < 10:
+ driver.can_enter_jit(frame=frame, codeno=codeno, i=i)
+ driver.jit_merge_point(frame=frame, codeno=codeno, i=i)
+ nextval = frame.thing.val
+ if codeno == 0:
+ subframe = Frame()
+ subframe.thing = Thing(nextval)
+ nextval = portal(1, subframe)
+ elif frame.thing.val > 40:
+ change(Thing(13))
+ nextval = 13
+ frame.thing = Thing(nextval + 1)
+ i += 1
+ return frame.thing.val
+
+ res = self.meta_interp(main, [0], inline=True,
+ policy=StopAtXPolicy(change))
+ assert res == main(0)
+
Modified: pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py
==============================================================================
--- pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py (original)
+++ pypy/branch/direct-assembler-call/pypy/jit/metainterp/test/test_basic.py Fri Jan 22 14:05:03 2010
@@ -22,7 +22,6 @@
stats = history.Stats()
cpu = CPUClass(rtyper, stats, None, False)
- cpu.assembler_helper_ptr = None
graphs = rtyper.annotator.translator.graphs
opt = history.Options(listops=listops)
metainterp_sd = pyjitpl.MetaInterpStaticData(graphs[0], cpu, stats, opt)
More information about the Pypy-commit
mailing list