[pypy-svn] r37053 - in pypy/dist/pypy/jit/codegen: i386 test
arigo at codespeak.net
arigo at codespeak.net
Sat Jan 20 09:35:28 CET 2007
Author: arigo
Date: Sat Jan 20 09:35:25 2007
New Revision: 37053
Modified:
pypy/dist/pypy/jit/codegen/i386/rgenop.py
pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
Fix bad code generated for switches that have only a default path and no case.
Modified: pypy/dist/pypy/jit/codegen/i386/rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/i386/rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/i386/rgenop.py Sat Jan 20 09:35:25 2007
@@ -838,7 +838,11 @@
self._reserve(mc)
default_builder = Builder(self.rgenop, self.inputargs_gv,
self.inputoperands)
- default_builder.set_coming_from(mc)
+ start = self.nextfreepos
+ end = self.endfreepos
+ fullmc = self.rgenop.InMemoryCodeBuilder(start, end)
+ default_builder.set_coming_from(fullmc)
+ fullmc.done()
default_builder.update_defaultcaseaddr_of = self
default_builder.start_writing()
return default_builder
Modified: pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/test/rgenop_tests.py (original)
+++ pypy/dist/pypy/jit/codegen/test/rgenop_tests.py Sat Jan 20 09:35:25 2007
@@ -984,3 +984,17 @@
res = fn(3)
assert res == 8
+
+ def test_defaultonly_switch(self):
+ rgenop = self.RGenOp()
+ signed_kind = rgenop.kindToken(lltype.Signed)
+ sigtoken = rgenop.sigToken(FUNC)
+ builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken, "defaultonly")
+ flexswitch, default_builder = builder.flexswitch(gv_x, [gv_x])
+ default_builder.finish_and_return(sigtoken, gv_x)
+ builder.end()
+
+ fnptr = self.cast(gv_callable, 1)
+
+ res = fnptr(17)
+ assert res == 17
More information about the Pypy-commit
mailing list