[pypy-svn] r77633 - pypy/branch/arm-backend/pypy/jit/backend/arm/test

david at codespeak.net david at codespeak.net
Tue Oct 5 21:34:22 CEST 2010


Author: david
Date: Tue Oct  5 21:34:21 2010
New Revision: 77633

Added:
   pypy/branch/arm-backend/pypy/jit/backend/arm/test/support.py
   pypy/branch/arm-backend/pypy/jit/backend/arm/test/test_assembler.py
Log:
integration tests to check generated instructions on arm


Added: pypy/branch/arm-backend/pypy/jit/backend/arm/test/support.py
==============================================================================
--- (empty file)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/test/support.py	Tue Oct  5 21:34:21 2010
@@ -0,0 +1,21 @@
+from pypy.rpython.lltypesystem import lltype, rffi
+
+def run_asm(asm):
+    BOOTSTRAP_TP = lltype.FuncType([], lltype.Signed)
+    addr = asm.mc.baseaddr()#executable_token._arm_bootstrap_code
+    assert addr % 8 == 0
+    func = rffi.cast(lltype.Ptr(BOOTSTRAP_TP), addr)
+    return func()
+
+def skip_unless_arm(f):
+    import os
+    def skip_it(*args):
+        import py
+        py.test.skip('only for arm')
+
+    func = skip_it
+    try:
+        if os.uname()[4].index('arm') >= 0:
+            func=f
+    finally:
+        return func

Added: pypy/branch/arm-backend/pypy/jit/backend/arm/test/test_assembler.py
==============================================================================
--- (empty file)
+++ pypy/branch/arm-backend/pypy/jit/backend/arm/test/test_assembler.py	Tue Oct  5 21:34:21 2010
@@ -0,0 +1,38 @@
+from pypy.jit.backend.arm import registers as r
+from pypy.jit.backend.arm.assembler import AssemblerARM
+from pypy.jit.backend.arm.test.support import skip_unless_arm, run_asm
+
+class TestRunningAssembler():
+    def setup_method(self, method):
+        self.a = AssemblerARM(None)
+
+    @skip_unless_arm
+    def test_load_small_int_to_reg(self):
+        self.a.gen_preamble()
+        self.a.gen_load_int(r.r0, 123)
+        self.a.gen_out()
+        assert run_asm(self.a) == 123
+
+    @skip_unless_arm
+    def test_load_medium_int_to_reg(self):
+        self.a.gen_preamble()
+        self.a.gen_load_int(r.r0, 0xBBD7)
+        self.a.gen_out()
+        assert run_asm(self.a) == 48087
+
+    @skip_unless_arm
+    def test_load_int_to_reg(self):
+        self.a.gen_preamble()
+        self.a.gen_load_int(r.r0, 0xFFFFFF85)
+        self.a.gen_out()
+        assert run_asm(self.a) == -123
+
+
+    @skip_unless_arm
+    def test_or(self):
+        self.a.gen_preamble()
+        self.a.mc.MOV_ri(r.r1, 8)
+        self.a.mc.MOV_ri(r.r2, 8)
+        self.a.mc.ORR_rr(r.r0, r.r1, r.r2, 4)
+        self.a.gen_out()
+        assert run_asm(self.a) == 0x88



More information about the Pypy-commit mailing list