[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