[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