Author: David Schneider <david.schnei...@picle.org> Branch: Changeset: r64864:59fdc0758a45 Date: 2013-06-12 06:00 -0500 http://bitbucket.org/pypy/pypy/changeset/59fdc0758a45/
Log: add a testcase for the failing case of having a jump to a label having a float that was spilled currently loaded in a register diff --git a/rpython/jit/backend/arm/test/test_runner.py b/rpython/jit/backend/arm/test/test_runner.py --- a/rpython/jit/backend/arm/test/test_runner.py +++ b/rpython/jit/backend/arm/test/test_runner.py @@ -11,6 +11,7 @@ from rpython.jit.codewriter.effectinfo import EffectInfo from rpython.jit.metainterp.history import JitCellToken, TargetToken from rpython.jit.backend.arm.detect import detect_arch_version +from rpython.jit.codewriter import longlong CPU = getcpuclass() @@ -261,3 +262,43 @@ l1 = ('debug_print', preambletoken.repr_of_descr() + ':1') l2 = ('debug_print', targettoken.repr_of_descr() + ':9') assert ('jit-backend-counts', [l0, l1, l2]) in dlog + + + def test_label_float_in_reg_and_on_stack(self): + targettoken = TargetToken() + ops = """ + [i0, f3] + i2 = same_as(i0) # but forced to be in a register + force_spill(i2) + force_spill(f3) + f4 = float_add(f3, 5.0) + label(f3, f4, descr=targettoken) + force_spill(f3) + f5 = same_as(f3) # but forced to be in a register + finish(f5) + """ + faildescr = BasicFailDescr(2) + loop = parse(ops, self.cpu, namespace=locals()) + looptoken = JitCellToken() + info = self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken) + ops2 = """ + [i0, f1] + i1 = same_as(i0) + f2 = same_as(f1) + f3 = float_add(f1, 10.0) + force_spill(f3) + force_spill(i1) + f4 = float_add(f3, f1) + jump(f3, f4, descr=targettoken) + """ + loop2 = parse(ops2, self.cpu, namespace=locals()) + looptoken2 = JitCellToken() + info = self.cpu.compile_loop(loop2.inputargs, loop2.operations, looptoken2) + + deadframe = self.cpu.execute_token(looptoken, -9, longlong.getfloatstorage(-13.5)) + res = longlong.getrealfloat(self.cpu.get_float_value(deadframe, 0)) + assert res == -13.5 + # + deadframe = self.cpu.execute_token(looptoken2, -9, longlong.getfloatstorage(-13.5)) + res = longlong.getrealfloat(self.cpu.get_float_value(deadframe, 0)) + assert res == -3.5 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit