[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