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

Reply via email to