[pypy-commit] pypy better-jit-hooks: (fijal, arigo) improve the assembler check (hopefully) usable for other

fijal noreply at buildbot.pypy.org
Mon Jan 9 17:30:47 CET 2012


Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: better-jit-hooks
Changeset: r51172:941c2be81863
Date: 2012-01-09 18:30 +0200
http://bitbucket.org/pypy/pypy/changeset/941c2be81863/

Log:	(fijal, arigo) improve the assembler check (hopefully) usable for
	other processors

diff --git a/pypy/jit/backend/test/runner_test.py b/pypy/jit/backend/test/runner_test.py
--- a/pypy/jit/backend/test/runner_test.py
+++ b/pypy/jit/backend/test/runner_test.py
@@ -28,6 +28,9 @@
 
 class Runner(object):
 
+    add_loop_instruction = ['overload for a specific cpu']
+    bridge_loop_instruction = ['overload for a specific cpu']
+
     def execute_operation(self, opname, valueboxes, result_type, descr=None):
         inputargs, operations = self._get_single_operation_list(opname,
                                                                 result_type,
@@ -3006,23 +3009,21 @@
         self.cpu.assembler.set_debug(True) # always on untranslated
         assert asmlen != 0
         cpuname = autodetect_main_model_and_size()
-        if 'x86' in cpuname:
-            # XXX we have to check the precise assembler, otherwise
-            # we don't quite know if borders are correct
-            def checkops(mc, startline, ops):
-                for i in range(startline, len(mc)):
-                    assert mc[i].split("\t")[-1].startswith(ops[i - startline])
+        # XXX we have to check the precise assembler, otherwise
+        # we don't quite know if borders are correct
+
+        def checkops(mc, startline, ops):
+            for i in range(startline, len(mc)):
+                assert mc[i].split("\t")[-1].startswith(ops[i - startline])
             
-            data = ctypes.string_at(asm, asmlen)
-            mc = list(machine_code_dump(data, asm, cpuname))
-            assert len(mc) == 5
-            checkops(mc, 1, ['add', 'test', 'je', 'jmp'])
-            data = ctypes.string_at(basm, basmlen)
-            mc = list(machine_code_dump(data, basm, cpuname))
-            assert len(mc) == 4
-            checkops(mc, 1, ['lea', 'mov', 'jmp'])
-        else:
-            raise Exception("Implement this test for your CPU")
+        data = ctypes.string_at(asm, asmlen)
+        mc = list(machine_code_dump(data, asm, cpuname))
+        assert len(mc) == 5
+        checkops(mc, 1, self.add_loop_instructions)
+        data = ctypes.string_at(basm, basmlen)
+        mc = list(machine_code_dump(data, basm, cpuname))
+        assert len(mc) == 4
+        checkops(mc, 1, self.bridge_loop_instructions)
 
 
     def test_compile_bridge_with_target(self):
diff --git a/pypy/jit/backend/x86/test/test_runner.py b/pypy/jit/backend/x86/test/test_runner.py
--- a/pypy/jit/backend/x86/test/test_runner.py
+++ b/pypy/jit/backend/x86/test/test_runner.py
@@ -33,6 +33,9 @@
     # for the individual tests see
     # ====> ../../test/runner_test.py
 
+    add_loop_instructions = ['add', 'test', 'je', 'jmp']
+    bridge_loop_instructions = ['lea', 'mov', 'jmp']
+
     def setup_method(self, meth):
         self.cpu = CPU(rtyper=None, stats=FakeStats())
         self.cpu.setup_once()


More information about the pypy-commit mailing list