Author: Maciej Fijalkowski <[email protected]>
Branch: resume-refactor
Changeset: r67431:06e3dae26511
Date: 2013-10-16 17:53 +0200
http://bitbucket.org/pypy/pypy/changeset/06e3dae26511/

Log:    fix this test

diff --git a/rpython/jit/backend/test/runner_test.py 
b/rpython/jit/backend/test/runner_test.py
--- a/rpython/jit/backend/test/runner_test.py
+++ b/rpython/jit/backend/test/runner_test.py
@@ -68,7 +68,6 @@
             locs = None
         else:
             self.guard_failed = True
-            xxxx
         if result_type == 'int':
             return BoxInt(self.cpu.get_int_value(deadframe, locs, 0))
         elif result_type == 'ref':
@@ -100,7 +99,6 @@
                       ResOperation(rop.FINISH, results, None,
                                    descr=BasicFinalDescr(0))]
         if operations[0].is_guard():
-            operations[0].setfailargs([])
             if not descr:
                 descr = BasicFailDescr(1)
         if descr is not None:
@@ -1187,9 +1185,12 @@
             #
             ks = range(nb_args)
             random.shuffle(ks)
+            intboxes = 0
+            floatboxes = 0
             for k in ks:
                 if isinstance(inputargs[k], BoxInt):
                     newbox = BoxInt()
+                    intboxes += 1
                     x = r.randrange(-100000, 100000)
                     operations.append(
                         ResOperation(rop.INT_ADD, [inputargs[k],
@@ -1198,6 +1199,7 @@
                     y = values[k] + x
                 else:
                     newbox = BoxFloat()
+                    floatboxes += 1
                     x = r.random()
                     operations.append(
                         ResOperation(rop.FLOAT_ADD, [inputargs[k],
@@ -1210,12 +1212,32 @@
                 retvalues.insert(kk, y)
             #
             zero = BoxInt()
+            jitcode = JitCode("name")
+            jitcode.setup(num_regs_i=intboxes, num_regs_r=0,
+                          num_regs_f=floatboxes)
             operations.extend([
+                ResOperation(rop.ENTER_FRAME, [ConstInt(-1)], None,
+                             descr=jitcode),
                 ResOperation(rop.SAME_AS, [ConstInt(0)], zero),
+            ])
+            i_int = 0
+            i_float = intboxes
+            expvalues = [None] * len(retboxes)
+            for i, box in enumerate(retboxes):
+                if isinstance(box, BoxInt):
+                    pos = i_int
+                    i_int += 1
+                else:
+                    pos = i_float
+                    i_float += 1
+                operations.append(ResOperation(rop.RESUME_PUT, [box, 
ConstInt(0), ConstInt(pos)], None))
+                expvalues[pos] = retvalues[i]
+            operations.extend([
                 ResOperation(rop.GUARD_TRUE, [zero], None, descr=guarddescr),
+                ResOperation(rop.LEAVE_FRAME, [], None),
                 ResOperation(rop.FINISH, [], None, descr=faildescr)
                 ])
-            operations[-2].setfailargs(retboxes)
+            #operations[-2].setfailargs(retboxes)
             print inputargs
             for op in operations:
                 print op
@@ -1223,14 +1245,15 @@
             #
             deadframe = self.cpu.execute_token(looptoken, *values)
             fail = self.cpu.get_latest_descr(deadframe)
+            locs = rebuild_locs_from_resumedata(fail)
             assert fail.identifier == 42
             #
-            for k in range(len(retvalues)):
-                if isinstance(retboxes[k], BoxInt):
-                    got = self.cpu.get_int_value(deadframe, k)
-                else:
-                    got = self.cpu.get_float_value(deadframe, k)
-                assert got == retvalues[k]
+            for k in range(intboxes):
+                got = self.cpu.get_int_value(deadframe, locs, k)
+                assert got == expvalues[k]
+            for k in range(floatboxes):
+                got = self.cpu.get_float_value(deadframe, locs, k + intboxes)
+                assert got == expvalues[k + intboxes]
 
     def test_jump(self):
         # this test generates small loops where the JUMP passes many
diff --git a/rpython/jit/metainterp/resume2.py 
b/rpython/jit/metainterp/resume2.py
--- a/rpython/jit/metainterp/resume2.py
+++ b/rpython/jit/metainterp/resume2.py
@@ -59,7 +59,8 @@
             xxx
         else:
             assert frontend_position < jitcode.num_regs()
-            xxx
+            self.put_box_float(frame, frontend_position - jitcode.num_regs_r()
+                               - jitcode.num_regs_i(), box)
 
 class DirectResumeReader(AbstractResumeReader):
     pass
@@ -84,6 +85,9 @@
     def put_box_int(self, frame, position, box):
         frame.registers_i[position] = box
 
+    def put_box_float(self, frame, position, box):
+        frame.registers_f[position] = box
+
     def finish(self):
         cpu = self.metainterp.cpu
         for box, position in self.backend_values.iteritems():
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to