[pypy-svn] r77268 - pypy/trunk/pypy/jit/backend/x86

fijal at codespeak.net fijal at codespeak.net
Wed Sep 22 14:28:34 CEST 2010


Author: fijal
Date: Wed Sep 22 14:28:33 2010
New Revision: 77268

Modified:
   pypy/trunk/pypy/jit/backend/x86/assembler.py
   pypy/trunk/pypy/jit/backend/x86/codebuf.py
Log:
* call valgrind_invalidated for each done() call, remove it from assembler.py
* add docstrings
* kill dead code


Modified: pypy/trunk/pypy/jit/backend/x86/assembler.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/assembler.py	(original)
+++ pypy/trunk/pypy/jit/backend/x86/assembler.py	Wed Sep 22 14:28:33 2010
@@ -419,7 +419,6 @@
             mc.MOV_ri(X86_64_SCRATCH_REG.value, adr_new_target)
             mc.JMP_r(X86_64_SCRATCH_REG.value)
 
-        mc.valgrind_invalidated()
         mc.done()
 
     def _inject_debugging_code(self, operations):
@@ -475,7 +474,6 @@
         # align, e.g. for Mac OS X        
         aligned_words = align_stack_words(words+2)-2 # 2 = EIP+EBP
         mc.writeimm32(-WORD * aligned_words)
-        mc.valgrind_invalidated()
         mc.done()
 
     def _call_header(self):
@@ -598,7 +596,6 @@
         target = newlooptoken._x86_direct_bootstrap_code
         mc = codebuf.InMemoryCodeBuilder(oldadr, oldadr + 16)
         mc.JMP(imm(target))
-        mc.valgrind_invalidated()
         mc.done()
 
     def _assemble_bootstrap_code(self, inputargs, arglocs):

Modified: pypy/trunk/pypy/jit/backend/x86/codebuf.py
==============================================================================
--- pypy/trunk/pypy/jit/backend/x86/codebuf.py	(original)
+++ pypy/trunk/pypy/jit/backend/x86/codebuf.py	Wed Sep 22 14:28:33 2010
@@ -29,6 +29,9 @@
         self._pos = 0
 
     def overwrite(self, pos, listofchars):
+        """ Overwrite a specified position with a given list of chars
+        (position is relative
+        """
         make_sure_not_resized(listofchars)
         assert pos + len(listofchars) <= self._size
         for c in listofchars:
@@ -49,35 +52,38 @@
         self.writechar(chr(n))
 
     def get_relative_pos(self):
+        """ Current position, relative to code start
+        """
         return self._pos
 
     def tell(self):
+        """ Tell the current address at machine code block
+        """
         baseaddr = rffi.cast(lltype.Signed, self._data)
         return baseaddr + self._pos
 
-    def seekback(self, count):
-        pos = self._pos - count
-        self._pos = pos
-        self._last_dump_start = pos
-
     def done(self):
-        # normally, no special action is needed here
+        """ Called at the end of writing of each piece of machine code.
+        Even though this function doesn't do much, it's extremely important
+        to call this for all tools to work, like valgrind or machine code
+        dumping
+        """
+        self.valgrind_invalidated()
         if machine_code_dumper.enabled:
             machine_code_dumper.dump_range(self, self._last_dump_start,
                                            self._pos)
             self._last_dump_start = self._pos
 
-    def redone(self, frm, to):
-        if machine_code_dumper.enabled:
-            baseaddr = rffi.cast(lltype.Signed, self._data)
-            machine_code_dumper.dump_range(self, frm - baseaddr, to - baseaddr)
-
     def log(self, msg):
+        """ Insert information into machine code dumper, if enabled
+        """
         if machine_code_dumper.enabled:
             machine_code_dumper.dump(self, 'LOG', self._pos, msg)
 
     def valgrind_invalidated(self):
-        # mark the range of the InMemoryCodeBuilder as invalidated for Valgrind
+        """ Mark the range of the InMemoryCodeBuilder as invalidated
+        for Valgrind
+        """
         from pypy.jit.backend.x86 import valgrind
         valgrind.discard_translations(self._data, self._size)
 



More information about the Pypy-commit mailing list