Author: Armin Rigo <[email protected]>
Branch: branch-prediction
Changeset: r90985:cec1f9a265c5
Date: 2017-04-06 15:41 +0200
http://bitbucket.org/pypy/pypy/changeset/cec1f9a265c5/
Log: hg merge default
diff --git a/rpython/jit/backend/llsupport/asmmemmgr.py
b/rpython/jit/backend/llsupport/asmmemmgr.py
--- a/rpython/jit/backend/llsupport/asmmemmgr.py
+++ b/rpython/jit/backend/llsupport/asmmemmgr.py
@@ -250,7 +250,7 @@
return self.rawstart
def overwrite(self, index, char):
- assert 0 <= index < self.get_relative_pos()
+ assert 0 <= index < self.get_relative_pos(break_basic_block=False)
block = self._cursubblock
index -= self._baserelpos
while index < 0:
@@ -264,7 +264,8 @@
self.overwrite(index + 2, chr((val >> 16) & 0xff))
self.overwrite(index + 3, chr((val >> 24) & 0xff))
- def get_relative_pos(self):
+ def get_relative_pos(self, break_basic_block=True):
+ # 'break_basic_block' is only used in x86
return self._baserelpos + self._cursubindex
def copy_to_raw_memory(self, addr):
@@ -288,7 +289,7 @@
HEX = '0123456789ABCDEF'
dump = []
src = rffi.cast(rffi.CCHARP, addr)
- end = self.get_relative_pos()
+ end = self.get_relative_pos(break_basic_block=False)
if count != -1:
end = offset + count
for p in range(offset, end):
@@ -336,17 +337,20 @@
def _become_a_plain_block_builder(self):
# hack purely for speed of tests
- self._data = []
- self.writechar = self._data.append
- self.overwrite = self._data.__setitem__
- self.get_relative_pos = self._data.__len__
+ self._data = _data = []
+ self.writechar = _data.append
+ self.overwrite = _data.__setitem__
+ def get_relative_pos(break_basic_block=True):
+ return len(_data)
+ self.get_relative_pos = get_relative_pos
def plain_copy_to_raw_memory(addr):
dst = rffi.cast(rffi.CCHARP, addr)
- for i, c in enumerate(self._data):
+ for i, c in enumerate(_data):
dst[i] = c
self._copy_to_raw_memory = plain_copy_to_raw_memory
def insert_gcroot_marker(self, mark):
if self.gcroot_markers is None:
self.gcroot_markers = []
- self.gcroot_markers.append((self.get_relative_pos(), mark))
+ self.gcroot_markers.append(
+ (self.get_relative_pos(break_basic_block=False), mark))
diff --git a/rpython/jit/backend/llsupport/assembler.py
b/rpython/jit/backend/llsupport/assembler.py
--- a/rpython/jit/backend/llsupport/assembler.py
+++ b/rpython/jit/backend/llsupport/assembler.py
@@ -265,14 +265,16 @@
def enter_portal_frame(self, op):
if self.cpu.HAS_CODEMAP:
+ pos = self.mc.get_relative_pos(break_basic_block=False)
self.codemap_builder.enter_portal_frame(op.getarg(0).getint(),
op.getarg(1).getint(),
- self.mc.get_relative_pos())
+ pos)
def leave_portal_frame(self, op):
if self.cpu.HAS_CODEMAP:
+ pos = self.mc.get_relative_pos(break_basic_block=False)
self.codemap_builder.leave_portal_frame(op.getarg(0).getint(),
- self.mc.get_relative_pos())
+ pos)
def call_assembler(self, op, argloc, vloc, result_loc, tmploc):
"""
diff --git a/rpython/jit/backend/x86/assembler.py
b/rpython/jit/backend/x86/assembler.py
--- a/rpython/jit/backend/x86/assembler.py
+++ b/rpython/jit/backend/x86/assembler.py
@@ -1718,6 +1718,8 @@
pos = self.mc.get_relative_pos(break_basic_block=False)
pos += 1 # after potential jmp
guard_token.pos_jump_offset = pos
+ saved = self.mc.get_scratch_register_known_value()
+ guard_token.known_scratch_value = saved
self.pending_guard_tokens.append(guard_token)
def genop_guard_guard_exception(self, guard_op, guard_token, locs, resloc):
@@ -1913,6 +1915,8 @@
"""
self.mc.force_frame_size(DEFAULT_FRAME_BYTES)
startpos = self.mc.get_relative_pos()
+ self.mc.restore_scratch_register_known_value(
+ guardtok.known_scratch_value)
#
self._update_at_exit(guardtok.fail_locs, guardtok.failargs,
guardtok.faildescr, regalloc)
@@ -2075,6 +2079,8 @@
self.guard_success_cc = rx86.cond_none
pos = self.mc.get_relative_pos(break_basic_block=False)
guard_token.pos_jump_offset = pos - 4
+ saved = self.mc.get_scratch_register_known_value()
+ guard_token.known_scratch_value = saved
self.pending_guard_tokens.append(guard_token)
def _genop_real_call(self, op, arglocs, resloc):
diff --git a/rpython/jit/backend/x86/regloc.py
b/rpython/jit/backend/x86/regloc.py
--- a/rpython/jit/backend/x86/regloc.py
+++ b/rpython/jit/backend/x86/regloc.py
@@ -621,6 +621,12 @@
def forget_scratch_register(self):
self._scratch_register_value = 0
+ def get_scratch_register_known_value(self):
+ return self._scratch_register_value
+
+ def restore_scratch_register_known_value(self, saved_value):
+ self._scratch_register_value = saved_value
+
def trap(self):
self.INT3()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit