[pypy-svn] r74023 - in pypy/branch/blackhole-improvement/pypy/jit/codewriter: . test

arigo at codespeak.net arigo at codespeak.net
Fri Apr 23 16:54:09 CEST 2010


Author: arigo
Date: Fri Apr 23 16:54:07 2010
New Revision: 74023

Modified:
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py
   pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py
Log:
AbstractDescrs in the assembler.


Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/assembler.py	Fri Apr 23 16:54:07 2010
@@ -1,4 +1,4 @@
-from pypy.jit.metainterp.history import AbstractValue, getkind
+from pypy.jit.metainterp.history import AbstractValue, AbstractDescr, getkind
 from pypy.jit.codewriter.flatten import Register, Label, TLabel, KINDS
 from pypy.jit.codewriter.flatten import ListOfKind
 from pypy.objspace.flow.model import Constant
@@ -29,6 +29,8 @@
 
     def __init__(self):
         self.insns = {}
+        self.descrs = []
+        self._descr_dict = {}
 
     def assemble(self, ssarepr):
         self.setup()
@@ -108,6 +110,15 @@
                         raise NotImplementedError("found in ListOfKind(): %r"
                                                   % (item,))
                 argcodes.append(itemkind[0].upper())
+            elif isinstance(x, AbstractDescr):
+                if x not in self._descr_dict:
+                    self._descr_dict[x] = len(self.descrs)
+                    self.descrs.append(x)
+                num = self._descr_dict[x]
+                assert 0 <= num <= 0xFFFF, "too many AbstractDescrs!"
+                self.code.append(chr(num & 0xFF))
+                self.code.append(chr(num >> 8))
+                argcodes.append('d')
             else:
                 raise NotImplementedError(x)
         #

Modified: pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py
==============================================================================
--- pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py	(original)
+++ pypy/branch/blackhole-improvement/pypy/jit/codewriter/test/test_assembler.py	Fri Apr 23 16:54:07 2010
@@ -1,6 +1,8 @@
+import struct
 from pypy.jit.codewriter.assembler import Assembler
 from pypy.jit.codewriter.flatten import SSARepr, Label, TLabel, Register
 from pypy.jit.codewriter.flatten import ListOfKind
+from pypy.jit.metainterp.history import AbstractDescr
 from pypy.objspace.flow.model import Constant
 from pypy.rpython.lltypesystem import lltype
 
@@ -93,3 +95,16 @@
     assert jitcode.code == "\x00\x03\x16\x17\xFF\x00"
     assert assembler.insns == {'foobar/IR': 0}
     assert jitcode.constants_i == [42]
+
+def test_assemble_descr():
+    class FooDescr(AbstractDescr):
+        pass
+    descrs = [FooDescr() for i in range(300)]
+    ssarepr = SSARepr("test")
+    ssarepr.insns = [('foobar', d) for d in descrs[::-1]]
+    assembler = Assembler()
+    jitcode = assembler.assemble(ssarepr)
+    assert jitcode.code == ''.join(["\x00" + struct.pack("<H", i)
+                                    for i in range(300)])
+    assert assembler.insns == {'foobar/d': 0}
+    assert assembler.descrs == descrs[::-1]



More information about the Pypy-commit mailing list