[pypy-svn] r36649 - in pypy/dist/pypy/jit/codegen: ppc/test test
mwh at codespeak.net
mwh at codespeak.net
Sat Jan 13 14:03:14 CET 2007
Author: mwh
Date: Sat Jan 13 14:03:13 2007
New Revision: 36649
Modified:
pypy/dist/pypy/jit/codegen/ppc/test/test_rgenop.py
pypy/dist/pypy/jit/codegen/test/rgenop_tests.py
Log:
move more tests from ppc/test/test_rgenop to test/rgenop_tests for added fun
for arigo.
Modified: pypy/dist/pypy/jit/codegen/ppc/test/test_rgenop.py
==============================================================================
--- pypy/dist/pypy/jit/codegen/ppc/test/test_rgenop.py (original)
+++ pypy/dist/pypy/jit/codegen/ppc/test/test_rgenop.py Sat Jan 13 14:03:13 2007
@@ -15,93 +15,6 @@
class TestRPPCGenop(AbstractRGenOpTests):
RGenOp = RPPCGenOp
- def test_multiple_cmps(self):
- # return x>y + 10*x<y + 100*x<=y + 1000*x>=y + 10000*x==y + 100000*x!=y
- rgenop = self.RGenOp()
- signed_kind = rgenop.kindToken(lltype.Signed)
- sigtoken = rgenop.sigToken(FUNC2)
- builder, gv_callable, [gv_x, gv_y] = rgenop.newgraph(sigtoken,
- "multicmp")
-
- args_gv = [gv_x, gv_y]
- builder.enter_next_block([signed_kind, signed_kind], args_gv)
- [gv_x, gv_y] = args_gv
-
- gv_gt = builder.genop2("int_gt", gv_x, gv_y)
- gv_lt = builder.genop2("int_lt", gv_x, gv_y)
- gv_ge = builder.genop2("int_ge", gv_x, gv_y)
- gv_le = builder.genop2("int_le", gv_x, gv_y)
- gv_eq = builder.genop2("int_eq", gv_x, gv_y)
- gv_ne = builder.genop2("int_ne", gv_x, gv_y)
-
- gv_gt2 = gv_gt
- gv_lt2 = builder.genop2("int_mul", rgenop.genconst(10), gv_lt)
- gv_ge2 = builder.genop2("int_mul", rgenop.genconst(100), gv_ge)
- gv_le2 = builder.genop2("int_mul", rgenop.genconst(1000), gv_le)
- gv_eq2 = builder.genop2("int_mul", rgenop.genconst(10000), gv_eq)
- gv_ne2 = builder.genop2("int_mul", rgenop.genconst(100000), gv_ne)
-
- gv_r0 = gv_gt
- gv_r1 = builder.genop2("int_add", gv_r0, gv_lt2)
- gv_r2 = builder.genop2("int_add", gv_r1, gv_ge2)
- gv_r3 = builder.genop2("int_add", gv_r2, gv_le2)
- gv_r4 = builder.genop2("int_add", gv_r3, gv_eq2)
- gv_r5 = builder.genop2("int_add", gv_r4, gv_ne2)
-
- builder.finish_and_return(sigtoken, gv_r5)
- builder.end()
- fnptr = cast(c_void_p(gv_callable.value), CFUNCTYPE(c_int, c_int))
- res = fnptr(1, 2)
- assert res == 101010
- res = fnptr(1, 1)
- assert res == 11100
- res = fnptr(2, 1)
- assert res == 100101
-
- def test_flipped_cmpwi(self):
- # return
- # 1>x + 10*(1<x) + 100*(1>=x) + 1000*(1<=x) + 10000*(1==x) + 100000*(1!=x)
- rgenop = self.RGenOp()
- signed_kind = rgenop.kindToken(lltype.Signed)
- sigtoken = rgenop.sigToken(FUNC)
- builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
- "multicmp")
- gv_one = rgenop.genconst(1)
-
- gv_gt = builder.genop2("int_gt", gv_one, gv_x)
- gv_lt = builder.genop2("int_lt", gv_one, gv_x)
- gv_ge = builder.genop2("int_ge", gv_one, gv_x)
- gv_le = builder.genop2("int_le", gv_one, gv_x)
- gv_eq = builder.genop2("int_eq", gv_one, gv_x)
- gv_ne = builder.genop2("int_ne", gv_one, gv_x)
-
- gv_gt2 = gv_gt
- gv_lt2 = builder.genop2("int_mul", rgenop.genconst(10), gv_lt)
- gv_ge2 = builder.genop2("int_mul", rgenop.genconst(100), gv_ge)
- gv_le2 = builder.genop2("int_mul", rgenop.genconst(1000), gv_le)
- gv_eq2 = builder.genop2("int_mul", rgenop.genconst(10000), gv_eq)
- gv_ne2 = builder.genop2("int_mul", rgenop.genconst(100000), gv_ne)
-
- gv_r0 = gv_gt
- gv_r1 = builder.genop2("int_add", gv_r0, gv_lt2)
- gv_r2 = builder.genop2("int_add", gv_r1, gv_ge2)
- gv_r3 = builder.genop2("int_add", gv_r2, gv_le2)
- gv_r4 = builder.genop2("int_add", gv_r3, gv_eq2)
- gv_r5 = builder.genop2("int_add", gv_r4, gv_ne2)
-
- builder.finish_and_return(sigtoken, gv_r5)
- builder.end()
- fnptr = cast(c_void_p(gv_callable.value), CFUNCTYPE(c_int))
-
- res = fnptr(0)
- assert res == 100101
-
- res = fnptr(1)
- assert res == 11100
-
- res = fnptr(2)
- assert res == 101010
-
class TestRPPCGenopNoRegs(TestRPPCGenop):
RGenOp = FewRegisters
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 13 14:03:13 2007
@@ -661,3 +661,91 @@
res = fnptr(1)
assert res == 3
+
+
+ def test_multiple_cmps(self):
+ # return x>y + 10*x<y + 100*x<=y + 1000*x>=y + 10000*x==y + 100000*x!=y
+ rgenop = self.RGenOp()
+ signed_kind = rgenop.kindToken(lltype.Signed)
+ sigtoken = rgenop.sigToken(FUNC2)
+ builder, gv_callable, [gv_x, gv_y] = rgenop.newgraph(sigtoken,
+ "multicmp")
+
+ args_gv = [gv_x, gv_y]
+ builder.enter_next_block([signed_kind, signed_kind], args_gv)
+ [gv_x, gv_y] = args_gv
+
+ gv_gt = builder.genop2("int_gt", gv_x, gv_y)
+ gv_lt = builder.genop2("int_lt", gv_x, gv_y)
+ gv_ge = builder.genop2("int_ge", gv_x, gv_y)
+ gv_le = builder.genop2("int_le", gv_x, gv_y)
+ gv_eq = builder.genop2("int_eq", gv_x, gv_y)
+ gv_ne = builder.genop2("int_ne", gv_x, gv_y)
+
+ gv_gt2 = gv_gt
+ gv_lt2 = builder.genop2("int_mul", rgenop.genconst(10), gv_lt)
+ gv_ge2 = builder.genop2("int_mul", rgenop.genconst(100), gv_ge)
+ gv_le2 = builder.genop2("int_mul", rgenop.genconst(1000), gv_le)
+ gv_eq2 = builder.genop2("int_mul", rgenop.genconst(10000), gv_eq)
+ gv_ne2 = builder.genop2("int_mul", rgenop.genconst(100000), gv_ne)
+
+ gv_r0 = gv_gt
+ gv_r1 = builder.genop2("int_add", gv_r0, gv_lt2)
+ gv_r2 = builder.genop2("int_add", gv_r1, gv_ge2)
+ gv_r3 = builder.genop2("int_add", gv_r2, gv_le2)
+ gv_r4 = builder.genop2("int_add", gv_r3, gv_eq2)
+ gv_r5 = builder.genop2("int_add", gv_r4, gv_ne2)
+
+ builder.finish_and_return(sigtoken, gv_r5)
+ builder.end()
+ fnptr = self.cast(gv_callable, 2)
+ res = fnptr(1, 2)
+ assert res == 101010
+ res = fnptr(1, 1)
+ assert res == 11100
+ res = fnptr(2, 1)
+ assert res == 100101
+
+ def test_flipped_cmp_with_immediate(self):
+ # return
+ # 1>x + 10*(1<x) + 100*(1>=x) + 1000*(1<=x) + 10000*(1==x) + 100000*(1!=x)
+ rgenop = self.RGenOp()
+ signed_kind = rgenop.kindToken(lltype.Signed)
+ sigtoken = rgenop.sigToken(FUNC)
+ builder, gv_callable, [gv_x] = rgenop.newgraph(sigtoken,
+ "multicmp")
+ gv_one = rgenop.genconst(1)
+
+ gv_gt = builder.genop2("int_gt", gv_one, gv_x)
+ gv_lt = builder.genop2("int_lt", gv_one, gv_x)
+ gv_ge = builder.genop2("int_ge", gv_one, gv_x)
+ gv_le = builder.genop2("int_le", gv_one, gv_x)
+ gv_eq = builder.genop2("int_eq", gv_one, gv_x)
+ gv_ne = builder.genop2("int_ne", gv_one, gv_x)
+
+ gv_gt2 = gv_gt
+ gv_lt2 = builder.genop2("int_mul", rgenop.genconst(10), gv_lt)
+ gv_ge2 = builder.genop2("int_mul", rgenop.genconst(100), gv_ge)
+ gv_le2 = builder.genop2("int_mul", rgenop.genconst(1000), gv_le)
+ gv_eq2 = builder.genop2("int_mul", rgenop.genconst(10000), gv_eq)
+ gv_ne2 = builder.genop2("int_mul", rgenop.genconst(100000), gv_ne)
+
+ gv_r0 = gv_gt
+ gv_r1 = builder.genop2("int_add", gv_r0, gv_lt2)
+ gv_r2 = builder.genop2("int_add", gv_r1, gv_ge2)
+ gv_r3 = builder.genop2("int_add", gv_r2, gv_le2)
+ gv_r4 = builder.genop2("int_add", gv_r3, gv_eq2)
+ gv_r5 = builder.genop2("int_add", gv_r4, gv_ne2)
+
+ builder.finish_and_return(sigtoken, gv_r5)
+ builder.end()
+ fnptr = self.cast(gv_callable, 1)
+
+ res = fnptr(0)
+ assert res == 100101
+
+ res = fnptr(1)
+ assert res == 11100
+
+ res = fnptr(2)
+ assert res == 101010
More information about the Pypy-commit
mailing list