Author: Armin Rigo <[email protected]>
Branch: result-in-resops
Changeset: r58366:d5826f6730c1
Date: 2012-10-22 18:32 +0200
http://bitbucket.org/pypy/pypy/changeset/d5826f6730c1/

Log:    (fijal, arigo) fix fix fix fix done in this file

diff --git a/pypy/jit/backend/llgraph/runner.py 
b/pypy/jit/backend/llgraph/runner.py
--- a/pypy/jit/backend/llgraph/runner.py
+++ b/pypy/jit/backend/llgraph/runner.py
@@ -864,7 +864,7 @@
         call_op = self.lltrace.operations[self.current_index]
         guard_op = self.lltrace.operations[self.current_index + 1]
         assert guard_op.getopnum() == rop.GUARD_NOT_FORCED
-        self.latest_values = self._getfailargs(guard_op, skip=call_op.result)
+        self.latest_values = self._getfailargs(guard_op, skip=call_op)
         self.latest_descr = _getdescr(guard_op)
         res = self.execute_call(calldescr, func, *args)
         del self.latest_descr
@@ -881,12 +881,16 @@
         func_to_call = rffi.cast(lltype.Ptr(FUNC), func)
         result = func_to_call(*call_args)
         return support.cast_result(descr.RESULT, result)
+    execute_call_release_gil_i = execute_call_release_gil
+    execute_call_release_gil_r = execute_call_release_gil
+    execute_call_release_gil_f = execute_call_release_gil
+    execute_call_release_gil_v = execute_call_release_gil
 
     def execute_call_assembler(self, descr, *args):
         call_op = self.lltrace.operations[self.current_index]
         guard_op = self.lltrace.operations[self.current_index + 1]
         assert guard_op.getopnum() == rop.GUARD_NOT_FORCED
-        self.latest_values = self._getfailargs(guard_op, skip=call_op.result)
+        self.latest_values = self._getfailargs(guard_op, skip=call_op)
         self.latest_descr = _getdescr(guard_op)
         #
         frame = self.cpu._execute_token(descr, *args)
@@ -907,11 +911,16 @@
         del self.latest_descr
         del self.latest_values
         return support.cast_result(lltype.typeOf(result), result)
+    execute_call_assembler_i = execute_call_assembler
+    execute_call_assembler_r = execute_call_assembler
+    execute_call_assembler_f = execute_call_assembler
+    execute_call_assembler_v = execute_call_assembler
 
-    def execute_same_as_i(self, _, x):
+    def execute_same_as(self, _, x):
         return x
-    execute_same_as_f = execute_same_as_i
-    execute_same_as_r = execute_same_as_i
+    execute_same_as_i = execute_same_as
+    execute_same_as_r = execute_same_as
+    execute_same_as_f = execute_same_as
 
     def execute_debug_merge_point(self, descr, *args):
         from pypy.jit.metainterp.warmspot import get_stats
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
@@ -15,7 +15,7 @@
 from pypy.rlib import longlong2float
 from pypy.rlib.rarithmetic import intmask, is_valid_int
 from pypy.jit.backend.detect_cpu import autodetect_main_model_and_size
-from pypy.jit.tool.oparser import parse
+from pypy.jit.tool import oparser
 
 
 def boxfloat(x=None):
@@ -23,6 +23,9 @@
         x = example_for_opnum(rop.INPUT_f)
     return create_resop_0(rop.INPUT_f, longlong.getfloatstorage(x))
 
+def boxlonglong_on_32bit(x):
+    return create_resop_0(rop.INPUT_f, x)
+
 def boxint(x=0):
     return create_resop_0(rop.INPUT_i, x)
 
@@ -72,6 +75,10 @@
         elif result_type == 'ref':
             return self.cpu.get_finish_value_ref(frame)
         elif result_type == 'float':
+            x = self.cpu.get_finish_value_float(frame)
+            return longlong.getrealfloat(x)
+        elif result_type == 'longlong':
+            assert longlong.supports_longlong
             return self.cpu.get_finish_value_float(frame)
         elif result_type == 'void':
             return None
@@ -86,7 +93,7 @@
             result = 0
         elif result_type == 'ref':
             result = lltype.nullptr(llmemory.GCREF.TO)
-        elif result_type == 'float':
+        elif result_type == 'float' or result_type == 'longlong':
             result = 0.0
         else:
             raise ValueError(result_type)
@@ -128,7 +135,7 @@
             namespace['faildescr3'] = BasicFailDescr(3)
         if 'faildescr4' not in namespace:
             namespace['faildescr4'] = BasicFailDescr(4)
-        loop = parse(s, namespace=namespace, guards_with_failargs=True)
+        loop = oparser.parse(s, namespace=namespace, guards_with_failargs=True)
         return loop.inputargs, loop.operations, JitCellToken()
 
     def test_compile_linear_loop(self):
@@ -1316,15 +1323,14 @@
         force_spill(f2)
         guard_false(i0, descr=faildescr0) [f1, f2, f3]
         finish() []"""
-        loop = parse(loopops, guards_with_failargs=True,
-                     namespace={'faildescr0': BasicFailDescr(1)})
-        looptoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        inputargs, operations, looptoken = self.parse(
+            loopops, namespace={'faildescr0': BasicFailDescr(1)})
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         args = [1]
         args.append(longlong.getfloatstorage(132.25))
         args.append(longlong.getfloatstorage(0.75))
         frame = self.cpu.execute_token(looptoken, *args)  #xxx check
-        assert loop.operations[-2].getdescr()== 
self.cpu.get_latest_descr(frame)
+        assert operations[-2].getdescr()== self.cpu.get_latest_descr(frame)
         f1 = self.cpu.get_latest_value_float(frame, 0)
         f2 = self.cpu.get_latest_value_float(frame, 1)
         f3 = self.cpu.get_latest_value_float(frame, 2)
@@ -1337,8 +1343,8 @@
                          mutable=True),
             ]
         bridgeops[-1].setfailargs(fboxes)
-        self.cpu.compile_bridge(loop.operations[-2].getdescr(), fboxes,
-                                                        bridgeops, looptoken)
+        self.cpu.compile_bridge(operations[-2].getdescr(), fboxes,
+                                bridgeops, looptoken)
         args = [1,
                 longlong.getfloatstorage(132.25),
                 longlong.getfloatstorage(0.75)]
@@ -1713,15 +1719,12 @@
             def wait_a_bit():
                 pass
         if longlong.is_64_bit:
-            res1 = self.execute_operation(rop.READ_TIMESTAMP, [], 'int')
-            wait_a_bit()
-            res2 = self.execute_operation(rop.READ_TIMESTAMP, [], 'int')
+            restype = 'int'
         else:
-            got1 = self.execute_operation(rop.READ_TIMESTAMP, [], 'float')
-            wait_a_bit()
-            got2 = self.execute_operation(rop.READ_TIMESTAMP, [], 'float')
-            res1 = got1.getlonglong()
-            res2 = got2.getlonglong()
+            restype = 'float'
+        res1 = self.execute_operation(rop.READ_TIMESTAMP, [], restype)
+        wait_a_bit()
+        res2 = self.execute_operation(rop.READ_TIMESTAMP, [], restype)
         assert res1 < res2 < res1 + 2**32
 
 
@@ -1823,11 +1826,11 @@
         t = 'int' if longlong.is_64_bit else 'float'
         res = self.execute_operation(rop.CONVERT_FLOAT_BYTES_TO_LONGLONG,
                                      [box], t)
-        assert res == longlong2float.float2longlong(2.5)
+        assert res == 2.5
 
         res = self.execute_operation(rop.CONVERT_LONGLONG_BYTES_TO_FLOAT,
                                      [boxlonglong(res)], 'float')
-        assert longlong.getrealfloat(res) == 2.5
+        assert res == 2.5
 
     def test_ooops_non_gc(self):
         x = lltype.malloc(lltype.Struct('x'), flavor='raw')
@@ -1925,7 +1928,7 @@
         i1 = same_as_i(1)
         call_v(ConstClass(fptr), i0, descr=calldescr)
         p0 = guard_exception(ConstClass(xtp), descr=faildescr2) [i1]
-        finish(0, p0, descr=faildescr1) []
+        finish(p0, descr=faildescr1) []
         '''
         FPTR = lltype.Ptr(lltype.FuncType([lltype.Signed], lltype.Void))
         fptr = llhelper(FPTR, func)
@@ -1944,10 +1947,8 @@
         exc_ptr = xptr
         faildescr1 = BasicFailDescr(1)
         faildescr2 = BasicFailDescr(2)
-        loop = parse(ops, self.cpu, namespace=locals(),
-                     guards_with_failargs=True)
-        looptoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        inputargs, operations, looptoken = self.parse(ops, namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 1)
         assert self.cpu.get_finish_value_ref(frame) == xptr
         frame = self.cpu.execute_token(looptoken, 0)
@@ -1966,9 +1967,8 @@
         # guard_exception uses an exact match
         exc_tp = ytp
         exc_ptr = yptr
-        loop = parse(ops, self.cpu, namespace=locals())
-        looptoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        inputargs, operations, looptoken = self.parse(ops, namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 1)
         assert self.cpu.get_latest_value_int(frame, 0) == 1
         excvalue = self.cpu.grab_exc_value(frame)
@@ -1979,13 +1979,12 @@
         ops = '''
         [i0]
         i1 = same_as_i(1)
-        call_n(ConstClass(fptr), i0, descr=calldescr)
+        call_v(ConstClass(fptr), i0, descr=calldescr)
         guard_no_exception(descr=faildescr1) [i1]
         finish(-100, descr=faildescr2) []
         '''
-        loop = parse(ops, self.cpu, namespace=locals())
-        looptoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        inputargs, operations, looptoken = self.parse(ops, namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 1)
         assert self.cpu.get_latest_value_int(frame, 0) == 1
         excvalue = self.cpu.grab_exc_value(frame)
@@ -2166,8 +2165,8 @@
         faildescr0 = BasicFailDescr(0)
         inputargs, operations, looptoken = self.parse("""
         [i0, i1]
-        itok = force_token()
-        call_may_force_n(ConstClass(func_ptr), itok, i1, descr=calldescr)
+        ptok = jit_frame()
+        call_may_force_v(ConstClass(func_ptr), ptok, i1, descr=calldescr)
         guard_not_forced(descr=faildescr) [i1, i0]
         finish(i0, descr=faildescr0)
         """, locals())
@@ -2202,8 +2201,8 @@
         faildescr0 = BasicFailDescr(0)
         inputargs, ops, looptoken = self.parse("""
         [i0, i1]
-        itok = force_token()
-        i2 = call_may_force_i(ConstClass(func_ptr), itok, i1)
+        ptok = jit_frame()
+        i2 = call_may_force_i(ConstClass(func_ptr), ptok, i1, descr=calldescr)
         guard_not_forced(descr=faildescr) [i1, i2, i0]
         finish(i2, descr=faildescr0)
         """, locals())
@@ -2241,8 +2240,8 @@
         faildescr0 = BasicFailDescr(0)
         inputargs, ops, looptoken = self.parse("""
         [i0, i1]
-        itok = force_token()
-        f0 = call_may_force_f(ConstClass(func_ptr), itok, i1, descr=calldescr)
+        ptok = jit_frame()
+        f0 = call_may_force_f(ConstClass(func_ptr), ptok, i1, descr=calldescr)
         guard_not_forced(descr=faildescr) [i1, f0, i0]
         finish(f0, descr=faildescr0) []
         """, locals())
@@ -2263,13 +2262,12 @@
 
     def test_force_from_finish(self):
         finishdescr = BasicFailDescr(1)
-        loop = parse('''
+        inputargs, operations, looptoken = self.parse('''
         [i1, i2]
         p0 = jit_frame()
         finish(p0, descr=faildescr1) [i1, i2]
         ''', namespace={'faildescr1': finishdescr})
-        looptoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 20, 0)
         self.cpu.force(frame)
         assert self.cpu.get_latest_descr(frame) is finishdescr
@@ -2341,7 +2339,7 @@
         faildescr0 = BasicFailDescr(0)
         inputargs, ops, looptoken = self.parse("""
         [i0, i1, i2, i3]
-        call_release_gil_n(ConstClass(func_ptr), i0, i1, i2, i3, 
descr=calldescr)
+        call_release_gil_v(ConstClass(func_ptr), i0, i1, i2, i3, 
descr=calldescr)
         guard_not_forced(descr=faildescr) []
         finish(descr=faildescr0)
         """, locals())
@@ -2675,7 +2673,7 @@
         ops = '''
         [i0, i1, i2, i3, i4, i5, i6, i7, i8, i9]
         i10 = int_add_ovf(i0, i1)
-        guard_no_overflow() []
+        guard_no_overflow(descr=faildescr2) []
         i11 = int_add(i10, i2)
         i12 = int_add(i11, i3)
         i13 = int_add(i12, i4)
@@ -2685,13 +2683,13 @@
         i17 = int_add(i16, i8)
         i18 = int_add(i17, i9)
         finish(i18, descr=faildescr1) []'''
-        loop = parse(ops, namespace={'faildescr1': BasicFailDescr(1)})
-        loop.operations[-1].getdescr().fast_path_done = True
-        looptoken = JitCellToken()
+        inputargs, operations, looptoken = self.parse(
+            ops, namespace={'faildescr1': BasicFailDescr(1)})
+        operations[-1].getdescr().fast_path_done = True
         looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
         fail_number = self.cpu.get_fail_descr_number(
-            loop.operations[1].getdescr())
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+            operations[1].getdescr())
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         ARGS = [lltype.Signed] * 10
         RES = lltype.Signed
         FakeJitDriverSD.portal_calldescr = self.cpu.calldescrof(
@@ -2709,11 +2707,11 @@
         '''
         faildescr1 = BasicFailDescr(1)
         faildescr2 = BasicFailDescr(2)
-        loop = parse(ops, namespace=locals())
-        othertoken = JitCellToken()
+        otherargs, otheroperations, othertoken = self.parse(
+            ops, namespace=locals())
 
         # test the fast path, which should not call assembler_helper()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
+        self.cpu.compile_loop(otherargs, otheroperations, othertoken)
         args = [i+1 for i in range(10)]
         frame = self.cpu.execute_token(othertoken, *args)
         res = self.cpu.get_finish_value_int(frame)
@@ -2753,16 +2751,16 @@
         ops = '''
         [f0, f1]
         i0 = float_eq(f0, -1.0)
-        guard_false(i0) []
+        guard_false(i0, descr=faildescr3) []
         f2 = float_add(f0, f1)
         finish(f2, descr=faildescr) []'''
-        loop = parse(ops, namespace={'faildescr': BasicFailDescr(1)})
-        loop.operations[-1].getdescr().fast_path_done = True
+        inputargs, operations, looptoken = self.parse(
+            ops, namespace={'faildescr': BasicFailDescr(1)})
+        operations[-1].getdescr().fast_path_done = True
         fail_number = self.cpu.get_fail_descr_number(
-            loop.operations[1].getdescr())
-        looptoken = JitCellToken()
+            operations[1].getdescr())
         looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         args = [longlong.getfloatstorage(1.2),
                 longlong.getfloatstorage(2.3)]
         frame = self.cpu.execute_token(looptoken, *args)
@@ -2776,9 +2774,8 @@
         '''
         faildescr1 = BasicFailDescr(1)
         faildescr2 = BasicFailDescr(2)
-        loop = parse(ops, namespace=locals())
-        othertoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
+        inputargs, operations, othertoken = self.parse(ops, namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, othertoken)
 
         # test the fast path, which should not call assembler_helper()
         args = [longlong.getfloatstorage(1.2),
@@ -2820,13 +2817,12 @@
 
         ops = '''
         [p0]
-        call(ConstClass(fptr2), p0, descr=calldescr2)
-        finish(p0) []'''
-        loop = parse(ops, namespace=locals())
+        call_v(ConstClass(fptr2), p0, descr=calldescr2)
+        finish(p0, descr=faildescr1) []'''
+        inputargs, operations, looptoken = self.parse(ops, namespace=locals())
         # not a fast_path finish!
-        looptoken = JitCellToken()
         looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         ARGS = [llmemory.GCREF]
         RES = llmemory.GCREF
         FakeJitDriverSD.portal_calldescr = self.cpu.calldescrof(
@@ -2837,14 +2833,13 @@
         ops = '''
         []
         p0 = jit_frame()
-        p1 = call_assembler(p0, descr=looptoken)
+        p1 = call_assembler_r(p0, descr=looptoken)
         guard_not_forced(descr=foodescr) []
-        finish() []
+        finish(descr=faildescr2) []
         '''
-        loop2 = parse(ops, namespace=locals())
-        othertoken = JitCellToken()
-        self.cpu.compile_loop(loop2.inputargs, loop2.operations, othertoken)
-
+        inputargs, operations, othertoken = self.parse(ops, namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, othertoken)
+        
         frame = self.cpu.execute_token(othertoken)
         assert not self.cpu.get_finish_value_ref(frame)
         assert called == [foodescr] * 2
@@ -2900,16 +2895,16 @@
         ops = '''
         [f0, f1]
         i0 = float_eq(f0, -1.0)
-        guard_false(i0) []
+        guard_false(i0, descr=faildescr2) []
         f2 = float_add(f0, f1)
         finish(f2, descr=faildescr1) []'''
-        loop = parse(ops, namespace={'faildescr1': BasicFailDescr(1)})
-        loop.operations[-1].getdescr().fast_path_done = True
-        looptoken = JitCellToken()
+        inputargs, operations, looptoken = self.parse(
+            ops, namespace={'faildescr1': BasicFailDescr(1)})
+        operations[-1].getdescr().fast_path_done = True
         looptoken.outermost_jitdriver_sd = FakeJitDriverSD()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         fail_number = self.cpu.get_fail_descr_number(
-            loop.operations[1].getdescr())
+            operations[1].getdescr())
         args = [longlong.getfloatstorage(1.25),
                 longlong.getfloatstorage(2.35)]
         frame = self.cpu.execute_token(looptoken, *args)
@@ -2925,9 +2920,8 @@
         '''
         faildescr2 = BasicFailDescr(2)
         faildescr1 = BasicFailDescr(1)
-        loop = parse(ops, namespace=locals())
-        othertoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, othertoken)
+        inputargs, operations, othertoken = self.parse(ops, namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, othertoken)
 
         # normal call_assembler: goes to looptoken
         args = [longlong.getfloatstorage(1.25),
@@ -2948,16 +2942,16 @@
         ops2 = '''
         [f0, f1]
         i0 = float_eq(f0, -2.0)
-        guard_false(i0) []
+        guard_false(i0, descr=faildescr3) []
         f2 = float_sub(f0, f1)
         finish(f2, descr=faildescr) []'''
-        loop2 = parse(ops2, namespace={'faildescr': BasicFailDescr(1)})
-        loop2.operations[-1].getdescr().fast_path_done = True
-        looptoken2 = JitCellToken()
+        inputargs2, operations2, looptoken2 = self.parse(
+            ops2, namespace={'faildescr': BasicFailDescr(1)})
+        operations2[-1].getdescr().fast_path_done = True
         looptoken2.outermost_jitdriver_sd = FakeJitDriverSD()
-        self.cpu.compile_loop(loop2.inputargs, loop2.operations, looptoken2)
+        self.cpu.compile_loop(inputargs2, operations2, looptoken2)
         fail_number = self.cpu.get_fail_descr_number(
-            loop2.operations[1].getdescr())
+            operations2[1].getdescr())
 
         # install it
         self.cpu.redirect_call_assembler(looptoken, looptoken2)
@@ -3230,9 +3224,10 @@
         calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
                                          EffectInfo.MOST_GENERAL)
         funcbox = self.get_funcbox(self.cpu, f)
-        res = self.execute_operation(rop.CALL, [funcbox, boxfloat(value)],
-                                     'float', descr=calldescr)
-        assert res.getfloatstorage() == expected
+        res = self.execute_operation(rop.CALL_f, [funcbox,
+                                                  boxlonglong_on_32bit(value)],
+                                     'longlong', descr=calldescr)
+        assert res == expected
 
     def test_singlefloat_result_of_call_direct(self):
         if not self.cpu.supports_singlefloats:
@@ -3347,10 +3342,10 @@
         calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT, 
effectinfo)
         testcases = [(4.0, 2.0), (6.25, 2.5)]
         for arg, expected in testcases:
-            res = self.execute_operation(rop.CALL, 
+            res = self.execute_operation(rop.CALL_f,
                         [funcbox, boxfloat(arg)],
                          'float', descr=calldescr)
-            assert res.getfloat() == expected
+            assert res == expected
 
     def test_compile_loop_with_target(self):
         looptoken = JitCellToken()
@@ -3394,10 +3389,10 @@
         finish(i1, descr=faildescr1) []
         """
         faildescr1 = BasicFailDescr(1)
-        loop = parse(ops, self.cpu, namespace=locals())
-        descr = loop.operations[-1].getdescr()
-        looptoken = JitCellToken()
-        self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+        inputargs, operations, looptoken = self.parse(
+            ops, namespace=locals())
+        descr = operations[-1].getdescr()
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         for inp, outp in [(2,2), (-3, 0)]:
             frame = self.cpu.execute_token(looptoken, inp)
             assert outp == self.cpu.get_finish_value_int(frame)
@@ -3484,6 +3479,7 @@
         cpu = self.cpu
         calldescr = cpu.calldescrof(deref(FPTR), (lltype.Signed,)*9, 
lltype.Void,
                                     EffectInfo.MOST_GENERAL)
+        faildescr42 = BasicFailDescr(42)
         inputargs, operations, looptoken = self.parse("""
         [i0]
         label(i0, descr=targettoken1)
@@ -3506,10 +3502,10 @@
         i17 = int_add(i16, 1)
         i18 = int_add(i17, 1)
         i19 = int_add(i18, 1)
-        call_n(ConstClass(func_ptr), i2, i4, i6, i8, i10, i12, i14, i16, i18, 
descr=calldescr)
-        call_n(ConstClass(func_ptr), i2, i4, i6, i8, i10, i12, i14, i16, i18, 
descr=calldescr)
+        call_v(ConstClass(func_ptr), i2, i4, i6, i8, i10, i12, i14, i16, i18, 
descr=calldescr)
+        call_v(ConstClass(func_ptr), i2, i4, i6, i8, i10, i12, i14, i16, i18, 
descr=calldescr)
         i20 = int_lt(i19, 100)
-        guard_true(i20, descr=faildescr) []
+        guard_true(i20, descr=faildescr42) []
         jump(i19, descr=targettoken1)
         """, locals())
         self.cpu.compile_bridge(faildescr1, inputargs, operations, looptoken1)
@@ -3524,21 +3520,22 @@
 
     def test_wrong_guard_nonnull_class(self):
         t_box, T_box = self.alloc_instance(self.T)
-        null_box = self.null_instance()
+        the_class = T_box.getint()
         faildescr = BasicFailDescr(42)
-        operations = [
-            ResOperation(rop.GUARD_NONNULL_CLASS, [t_box, T_box], None,
-                                                        descr=faildescr),
-            ResOperation(rop.FINISH, [], None, descr=BasicFailDescr(1))]
-        operations[0].setfailargs([])
-        looptoken = JitCellToken()
-        inputargs = [t_box]
+        faildescr99 = BasicFailDescr(99)
+        inputargs, operations, looptoken = self.parse("""
+        [p0]
+        guard_nonnull_class(p0, ConstClass(the_class), descr=faildescr) []
+        finish(descr=faildescr1) []
+        """, namespace=locals())
         self.cpu.compile_loop(inputargs, operations, looptoken)
-        operations = [
-            ResOperation(rop.FINISH, [], None, descr=BasicFailDescr(99))
-        ]
+        _, operations, _ = self.parse("""
+        []
+        finish(descr=faildescr99) []
+        """, namespace=locals())
         self.cpu.compile_bridge(faildescr, [], operations, looptoken)
-        frame = self.cpu.execute_token(looptoken, null_box.getref_base())
+        frame = self.cpu.execute_token(looptoken,
+                                       lltype.nullptr(llmemory.GCREF.TO))
         assert self.cpu.get_latest_descr(frame).identifier == 99
 
     def test_raw_load_int(self):
@@ -3559,9 +3556,9 @@
             value = rffi.cast(T, 0x4243444546474849)
             rawstorage.raw_storage_setitem(p, 16, value)
             faildescr1 = BasicFailDescr(1)
-            loop = parse(ops, self.cpu, namespace=locals())
-            looptoken = JitCellToken()
-            self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+            inputargs, operations, looptoken = self.parse(
+                ops, namespace=locals())
+            self.cpu.compile_loop(inputargs, operations, looptoken)
             frame = self.cpu.execute_token(looptoken,
                                            rffi.cast(lltype.Signed, p), 16)
             result = self.cpu.get_finish_value_int(frame)
@@ -3585,9 +3582,9 @@
             value = rffi.cast(T, 1.12e20)
             rawstorage.raw_storage_setitem(p, 16, value)
             faildescr1 = BasicFailDescr(1)
-            loop = parse(ops, self.cpu, namespace=locals())
-            looptoken = JitCellToken()
-            self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+            inputargs, operations, looptoken = self.parse(
+                ops, namespace=locals())
+            self.cpu.compile_loop(inputargs, operations, looptoken)
             frame = self.cpu.execute_token(looptoken,
                                            rffi.cast(lltype.Signed, p), 16)
             result = self.cpu.get_finish_value_float(frame)
@@ -3612,9 +3609,9 @@
                 p[i] = '\xDD'
             value = 0x4243444546474849 & sys.maxint
             faildescr1 = BasicFailDescr(1)
-            loop = parse(ops, self.cpu, namespace=locals())
-            looptoken = JitCellToken()
-            self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+            inputargs, operations, looptoken = self.parse(
+                ops, namespace=locals())
+            self.cpu.compile_loop(inputargs, operations, looptoken)
             frame = self.cpu.execute_token(looptoken,
                                         rffi.cast(lltype.Signed, p), 16, value)
             result = rawstorage.raw_storage_getitem(T, p, 16)
@@ -3637,9 +3634,9 @@
                 p[i] = '\xDD'
             value = 1.23e20
             faildescr1 = BasicFailDescr(1)
-            loop = parse(ops, self.cpu, namespace=locals())
-            looptoken = JitCellToken()
-            self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
+            inputargs, operations, looptoken = self.parse(
+                ops, namespace=locals())
+            self.cpu.compile_loop(inputargs, operations, looptoken)
             frame = self.cpu.execute_token(looptoken,
                                            rffi.cast(lltype.Signed, p), 16,
                                            longlong.getfloatstorage(value))
@@ -3657,24 +3654,17 @@
 
         FUNC = self.FuncType([self.cpu.JITFRAMEPTR, lltype.Signed], 
lltype.Signed)
         func_ptr = llhelper(lltype.Ptr(FUNC), maybe_force)
-        funcbox = self.get_funcbox(self.cpu, func_ptr).constbox()
         calldescr = self.cpu.calldescrof(FUNC, FUNC.ARGS, FUNC.RESULT,
                                          EffectInfo.MOST_GENERAL)
-        i0 = BoxInt()
-        i1 = BoxInt()
-        i2 = BoxInt()
-        tok = BoxPtr()
         faildescr = BasicFailDescr(23)
-        ops = [
-        ResOperation(rop.JIT_FRAME, [], tok),
-        ResOperation(rop.CALL_MAY_FORCE, [funcbox, tok, i1], i2,
-                     descr=calldescr),
-        ResOperation(rop.GUARD_NOT_FORCED, [], None, descr=faildescr),
-        ResOperation(rop.FINISH, [i2], None, descr=BasicFailDescr(0))
-        ]
-        ops[2].setfailargs([i2])
-        looptoken = JitCellToken()
-        self.cpu.compile_loop([i0, i1], ops, looptoken)
+        inputargs, operations, looptoken = self.parse('''
+        [i0, i1]
+        ptok = jit_frame()
+        i2 = call_may_force_i(ConstClass(func_ptr), ptok, i1, descr=calldescr)
+        guard_not_forced(descr=faildescr) [i2]
+        finish(i2, descr=faildescr2) []
+        ''', namespace=locals())
+        self.cpu.compile_loop(inputargs, operations, looptoken)
         frame = self.cpu.execute_token(looptoken, 20, 0)
         assert self.cpu.get_latest_descr(frame).identifier == 23
         assert self.cpu.get_latest_value_int(frame, 0) == 42
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py 
b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -21,6 +21,7 @@
 from pypy.jit.metainterp.resoperation import rop, AbstractResOp, opgroups,\
      Const, ConstInt, ConstFloat, AbstractValue
 from pypy.jit.metainterp.typesystem import llhelper
+from pypy.jit.codewriter import longlong
 from pypy.rlib.objectmodel import specialize, we_are_translated
 from pypy.tool.pairtype import extendabletype
 
@@ -289,7 +290,7 @@
 CONST_0      = ConstInt(0)
 CONST_1      = ConstInt(1)
 CVAL_ZERO    = ConstantValue(CONST_0)
-CVAL_ZERO_FLOAT = ConstantValue(ConstFloat(0.0))
+CVAL_ZERO_FLOAT = ConstantValue(ConstFloat(longlong.getfloatstorage(0.0)))
 CVAL_NULLREF = ConstantValue(llhelper.CONST_NULL)
 llhelper.CVAL_NULLREF = CVAL_NULLREF
 REMOVED = AbstractResOp()
diff --git a/pypy/jit/tool/oparser.py b/pypy/jit/tool/oparser.py
--- a/pypy/jit/tool/oparser.py
+++ b/pypy/jit/tool/oparser.py
@@ -10,6 +10,7 @@
      ResOpNone, create_resop_0, example_for_opnum
 from pypy.jit.metainterp import optmodel
 from pypy.rpython.lltypesystem import lltype, llmemory
+from pypy.rlib.objectmodel import Symbolic
 
 class ParseError(Exception):
     pass
@@ -45,7 +46,9 @@
                 return self.model.ConstPtr(obj)
             else:
                 assert typ == 'class'
-                return self.model.ConstInt(self.model.ptr_to_int(obj))
+                if not isinstance(obj, Symbolic):
+                    obj = self.model.ptr_to_int(obj)
+                return self.model.ConstInt(obj)
         else:
             if typ == 'ptr':
                 return self.model.ConstObj(obj)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to