[pypy-svn] r18366 - in pypy/dist/pypy/translator/asm: . i386gen test
mwh at codespeak.net
mwh at codespeak.net
Tue Oct 11 10:38:37 CEST 2005
Author: mwh
Date: Tue Oct 11 10:38:30 2005
New Revision: 18366
Added:
pypy/dist/pypy/translator/asm/i386gen/
pypy/dist/pypy/translator/asm/i386gen/__init__.py
pypy/dist/pypy/translator/asm/i386gen/i386_assembler.py
Modified:
pypy/dist/pypy/translator/asm/genasm.py
pypy/dist/pypy/translator/asm/test/test_asm.py
Log:
Made PPC assembly generation test skip cleanly on windows.
Added stub-only for i386 pass. No code yet generated.
Modified: pypy/dist/pypy/translator/asm/genasm.py
==============================================================================
--- pypy/dist/pypy/translator/asm/genasm.py (original)
+++ pypy/dist/pypy/translator/asm/genasm.py Tue Oct 11 10:38:30 2005
@@ -1,11 +1,30 @@
+import sys
from pypy.objspace.flow.model import traverse, Block, Variable, Constant
-from pypy.translator.asm.ppcgen.ppc_assembler import PPCAssembler
-from pypy.translator.asm.ppcgen.func_builder import make_func
+
+
+#Available Machine code targets (processor+operating system)
+TARGET_PPC=1
+TARGET_WIN386=2
+
+#set one of these
+ASM_TARGET=TARGET_PPC
+#ASM_TARGET=TARGET_WIN386
+
+
+if ASM_TARGET==TARGET_PPC:
+ from pypy.translator.asm.ppcgen.ppc_assembler import PPCAssembler
+ from pypy.translator.asm.ppcgen.func_builder import make_func
+elif ASM_TARGET==TARGET_WIN386:
+ from pypy.translator.asm.i386gen.i386_assembler import i386Assembler as PPCAssembler #spoof system for time being
+ from pypy.translator.asm.i386gen.i386_assembler import make_func
+else:
+ raise Exception,'Unknown Machine-code target specified. Set ASM_TARGET=TARGET_XXXX '
+
def genlinkcode(link):
for s, t in zip(link.args, link.target.inputargs):
print ' ', 'mr', t, s
-
+
def genasm(translator):
@@ -15,8 +34,10 @@
g = FuncGenerator(graph)
g.gencode()
+ if ASM_TARGET==TARGET_WIN386:
+ g.assembler.dump()
return make_func(g.assembler, 'i', 'ii')
-
+
class FuncGenerator(object):
@@ -33,9 +54,13 @@
self.next_register = 3
for var in graph.startblock.inputargs:
self.assign_register(var)
+
self._block_counter = 0
self.assembler = PPCAssembler()
+
+
+
def assign_register(self, var):
assert var not in self._var2reg
self._var2reg[var] = self.next_register
@@ -116,4 +141,4 @@
def same_as(self, dest, v1):
self.assembler.mr(self.reg(dest), self.reg(v1))
-
+
Added: pypy/dist/pypy/translator/asm/i386gen/__init__.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/asm/i386gen/__init__.py Tue Oct 11 10:38:30 2005
@@ -0,0 +1 @@
+#thats all
Added: pypy/dist/pypy/translator/asm/i386gen/i386_assembler.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/translator/asm/i386gen/i386_assembler.py Tue Oct 11 10:38:30 2005
@@ -0,0 +1,44 @@
+"""i386 Basic assembler...
+Designed to mirror the PPC assembler system, operands added as required.
+
+Current system needs to assemble given, code, link into python, and return python
+callabale. (Stub routine currently given).
+
+"""
+
+class i386Assembler:
+
+ def __init__(self):
+ self._opcodes=[]
+
+ def __getattr__(self,attr):
+ def func(*args):
+ return self.op(attr,args)
+ return func
+
+ def op(self,opcode,*args):
+ self._opcodes.append((opcode,args))
+
+ def Make_func(cls,assembler,input='ii',output='i'):
+ return lambda x,y:x+y+1
+
+ Make_func=classmethod(Make_func)
+
+ def dump(self):
+ l=1000
+ for op in self._opcodes:
+ print '>>%d :%s' %(l,str(op))
+ l+=1
+
+make_func=i386Assembler.Make_func
+
+
+if __name__=='__main__':
+ a=i386Assembler()
+ a.op('mov','ax,''bx')
+
+ a.mov('spi','esi')
+ print a._opcodes
+ a.dump()
+
+
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 Tue Oct 11 10:38:30 2005
@@ -3,15 +3,16 @@
import os
class TestAsm(object):
-
+
def setup_class(cls):
- if os.uname()[-1] != 'Power Macintosh':
+ if not hasattr(os, "uname") or os.uname()[-1] != 'Power Macintosh':
py.test.skip('asm generation only on PPC')
+
cls.processor = 'ppc'
-
+
def getcompiled(self, func, view=False):
t = Translator(func, simplifying=True)
- # builds starting-types from func_defs
+ # builds starting-types from func_defs
argstypelist = []
if func.func_defaults is None:
assert func.func_code.co_argcount == 0
@@ -33,7 +34,7 @@
return None
f = self.getcompiled(testfn)
assert f() == None
-
+
def test_int_add(self):
def testfn(x=int, y=int):
z = 1 + x
@@ -42,7 +43,8 @@
else:
return x + y - 42
f = self.getcompiled(testfn)#, view=True)
+
assert f(2, 3) == testfn(2, 3)
assert f(-2, 3) == testfn(-2, 3)
-
-
+
+
More information about the Pypy-commit
mailing list