[pypy-svn] r18476 - in pypy/dist/pypy/translator: . asm asm/test

mwh at codespeak.net mwh at codespeak.net
Wed Oct 12 16:02:07 CEST 2005


Author: mwh
Date: Wed Oct 12 16:02:05 2005
New Revision: 18476

Modified:
   pypy/dist/pypy/translator/asm/genasm.py
   pypy/dist/pypy/translator/asm/infregmachine.py
   pypy/dist/pypy/translator/asm/test/test_asm.py
   pypy/dist/pypy/translator/translator.py
Log:
run tests both as our infinite register machine language and
as ppc machine code (when possible).


Modified: pypy/dist/pypy/translator/asm/genasm.py
==============================================================================
--- pypy/dist/pypy/translator/asm/genasm.py	(original)
+++ pypy/dist/pypy/translator/asm/genasm.py	Wed Oct 12 16:02:05 2005
@@ -2,6 +2,7 @@
 from pypy.objspace.flow.model import traverse, Block, Variable, Constant
 from pypy.translator.asm import infregmachine
 from pypy.rpython.lltype import Signed
+from pypy.translator.asm.simulator import Machine
 
 #Available Machine code targets (processor+operating system)
 TARGET_UNKNOWN=0
@@ -33,7 +34,7 @@
     from pypy.translator.asm.i386gen.i386_assembler import make_func
 
 
-def genasm(translator):
+def genasm(translator, processor):
 
     f = translator.entrypoint
 
@@ -48,10 +49,19 @@
 
     g = FuncGenerator(graph)
     g.gencode()
-#    g.assembler.dump()
-#    finreg = g.assembler.allocate_registers(5)
 
-    return make_func(finreg.assemble(), 'i', 'i'*len(graph.startblock.inputargs))
+    if processor == 'virt':
+        def r(*args):
+            return Machine.RunProgram(g.assembler.instructions,
+                                      args,
+                                      1000,
+                                      tracing=True)
+
+        return r
+    elif processor == 'ppc':
+        fin = g.assembler.allocate_registers(30)
+        return make_func(fin.assemble(), 'i',
+                         'i'*len(graph.startblock.inputargs))
 
 class FuncGenerator(object):
 

Modified: pypy/dist/pypy/translator/asm/infregmachine.py
==============================================================================
--- pypy/dist/pypy/translator/asm/infregmachine.py	(original)
+++ pypy/dist/pypy/translator/asm/infregmachine.py	Wed Oct 12 16:02:05 2005
@@ -33,6 +33,19 @@
             args = ', '.join(map(c, self.arguments))
         return '%-30s'%('    %-10s %s'%(self.name, args),)
 
+class Program(object):
+    # approximately a list of Instructions, but with sprinkles
+    # not used yet.
+
+    def __init__(self, insns):
+        self.insns = insns
+
+    def iterinsns(self):
+        for insn in self.insns:
+            if isinstance(ins, str):
+                continue
+            yield insn
+
 class Assembler(object):
     def __init__(self):
         self.instructions = []
@@ -53,9 +66,6 @@
         from pypy.translator.asm import regalloc
         r = FiniteRegisterAssembler(nregisters)
         r.instructions = regalloc.regalloc(self.instructions, nregisters)
-#        for i in r.instructions:
-#            if not isinstance(i, str): # labels
-#                assert max(i.registers_used() + [0]) < nregisters
         r.dump()
         return r
 

Modified: pypy/dist/pypy/translator/asm/test/test_asm.py
==============================================================================
--- pypy/dist/pypy/translator/asm/test/test_asm.py	(original)
+++ pypy/dist/pypy/translator/asm/test/test_asm.py	Wed Oct 12 16:02:05 2005
@@ -4,11 +4,7 @@
 
 class TestAsm(object):
 
-    def setup_class(cls):
-        #if not hasattr(os, "uname") or os.uname()[-1] != 'Power Macintosh':
-        #    py.test.skip('asm generation only on PPC')
-        # 
-        #cls.processor = 'ppc'
+    processor = 'virt'
 
     def getcompiled(self, func, view=False):
         t = Translator(func, simplifying=True)
@@ -61,4 +57,13 @@
         assert f(10) == testfn(10)
         assert f(100) == testfn(100)
         assert f(1000) == testfn(1000)
-            
+
+class TestAsmPPC(TestAsm):
+
+    processor = 'ppc'
+
+    def setup_class(cls):
+        if not hasattr(os, "uname") or os.uname()[-1] != 'Power Macintosh':
+            py.test.skip('asm generation only on PPC')
+
+

Modified: pypy/dist/pypy/translator/translator.py
==============================================================================
--- pypy/dist/pypy/translator/translator.py	(original)
+++ pypy/dist/pypy/translator/translator.py	Wed Oct 12 16:02:05 2005
@@ -327,11 +327,11 @@
         self.frozen = True
         return genllvm.genllvm(self, really_compile=really_compile, standalone=standalone, optimize=optimize, exe_name=exe_name, gcpolicy=gcpolicy)
 
-    def asmcompile(self, processor='ppc'):
+    def asmcompile(self, processor='virt'):
         from pypy.translator.asm import genasm
-        assert processor == 'ppc', 'only ppc asm-generation supported for now'
+        assert processor in ['ppc', 'virt']
         assert self.rtyper is not None, 'must specialize'
-        return genasm.genasm(self)
+        return genasm.genasm(self, processor)
 
     def call(self, *args):
         """Calls underlying Python function."""



More information about the Pypy-commit mailing list