Author: Remi Meier <[email protected]>
Branch: stmgc-c4
Changeset: r66037:9afebecca934
Date: 2013-08-09 14:44 +0200
http://bitbucket.org/pypy/pypy/changeset/9afebecca934/
Log: fix something, still not working
diff --git a/rpython/jit/backend/arm/regalloc.py
b/rpython/jit/backend/arm/regalloc.py
--- a/rpython/jit/backend/arm/regalloc.py
+++ b/rpython/jit/backend/arm/regalloc.py
@@ -629,7 +629,7 @@
fail_descr = cast_instance_to_gcref(descr)
# we know it does not move, but well
fail_descr = rgc._make_sure_does_not_move(fail_descr)
- fail_descr = rffi.cast(lltype.Signed, fail_descr)
+ fail_descr = rgc.cast_gcref_to_int(fail_descr)
if op.numargs() == 1:
loc = self.make_sure_var_in_reg(op.getarg(0))
locs = [loc, imm(fail_descr)]
diff --git a/rpython/jit/backend/x86/regalloc.py
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -366,10 +366,10 @@
# the frame is in ebp, but we have to point where in the frame is
# the potential argument to FINISH
descr = op.getdescr()
- fail_descr = cast_instance_to_gcref(descr)
+ fail_descr = rgc.cast_instance_to_gcref(descr)
# we know it does not move, but well
fail_descr = rgc._make_sure_does_not_move(fail_descr)
- fail_descr = rffi.cast(lltype.Signed, fail_descr)
+ fail_descr = rgc.cast_gcref_to_int(fail_descr)
if op.numargs() == 1:
loc = self.make_sure_var_in_reg(op.getarg(0))
locs = [loc, imm(fail_descr)]
diff --git a/rpython/jit/backend/x86/test/test_stm_integration.py
b/rpython/jit/backend/x86/test/test_stm_integration.py
--- a/rpython/jit/backend/x86/test/test_stm_integration.py
+++ b/rpython/jit/backend/x86/test/test_stm_integration.py
@@ -19,7 +19,7 @@
GCDescrShadowstackDirect, BaseTestRegalloc, JitFrameDescrs)
from rpython.jit.backend.llsupport import jitframe
from rpython.memory.gc.stmgc import StmGC
-import itertools
+import itertools, sys
import ctypes
CPU = getcpuclass()
@@ -58,13 +58,16 @@
# ____________________________________________________________
+def allocate_protected(TP, tid=123, n=1, zero=True):
+ obj = lltype.malloc(TP, n=n, zero=zero)
+ obj.h_tid = rffi.cast(lltype.Unsigned,
+ StmGC.GCFLAG_OLD|StmGC.GCFLAG_WRITE_BARRIER | tid)
+ obj.h_revision = rffi.cast(lltype.Signed, -sys.maxint)
+ return obj
def jitframe_allocate(frame_info):
- import sys
- frame = lltype.malloc(JITFRAME, frame_info.jfi_frame_depth, zero=True)
- frame.h_tid = rffi.cast(lltype.Unsigned,
- StmGC.GCFLAG_OLD|StmGC.GCFLAG_WRITE_BARRIER | 123)
- frame.h_revision = rffi.cast(lltype.Signed, -sys.maxint)
+ frame = allocate_protected(JITFRAME,
+ frame_info.jfi_frame_depth, zero=True)
frame.jf_frame_info = frame_info
return frame
@@ -329,11 +332,14 @@
for guard in [None, rop.GUARD_TRUE, rop.GUARD_FALSE]:
cpu.gc_ll_descr.clear_lists()
+ # BUILD OPERATIONS:
i = i0
+ guarddescr = BasicFailDescr()
+ finaldescr = BasicFinalDescr()
operations = [ResOperation(rop.PTR_EQ, [p1, p2], i0)]
if guard is not None:
gop = ResOperation(guard, [i0], None,
- BasicFailDescr())
+ descr=guarddescr)
gop.setfailargs([])
operations.append(gop)
i = i1
@@ -343,22 +349,24 @@
# be used after it again... -> i
operations.append(
ResOperation(rop.FINISH, [i], None,
- descr=BasicFinalDescr())
+ descr=finaldescr)
)
-
- inputargs = [p for p in (p1, p2) if not isinstance(p,
Const)]
+
+ # COMPILE & EXECUTE LOOP:
+ inputargs = [p for p in (p1, p2)
+ if not isinstance(p, Const)]
looptoken = JitCellToken()
- c_loop = cpu.compile_loop(inputargs + [i1], operations,
looptoken)
+ c_loop = cpu.compile_loop(inputargs + [i1], operations,
+ looptoken)
print c_loop
args = [s for i, s in enumerate((s1, s2))
if not isinstance((p1, p2)[i], Const)] + [1]
+
frame = self.cpu.execute_token(looptoken, *args)
frame = rffi.cast(JITFRAMEPTR, frame)
- if frame.jf_descr is operations[-1].getdescr():
- guard_failed = False
- else:
- guard_failed = True
+ guard_failed = frame.jf_descr is not finaldescr
+ # CHECK:
a, b = s1, s2
if isinstance(p1, Const):
s1 = p1.value
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit