Author: Armin Rigo <[email protected]>
Branch: emit-call-x86
Changeset: r64348:5bf566262645
Date: 2013-05-19 22:08 +0200
http://bitbucket.org/pypy/pypy/changeset/5bf566262645/
Log: Introduce and use emit_no_collect().
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
@@ -1012,6 +1012,10 @@
result_loc, result_type)
cb.emit()
+ def simple_call_no_collect(self, fnloc, arglocs):
+ cb = callbuilder.CallBuilder(self, fnloc, arglocs)
+ cb.emit_no_collect()
+
def _reload_frame_if_necessary(self, mc, align_stack=False):
gcrootmap = self.cpu.gc_ll_descr.gcrootmap
if gcrootmap:
diff --git a/rpython/jit/backend/x86/callbuilder.py
b/rpython/jit/backend/x86/callbuilder.py
--- a/rpython/jit/backend/x86/callbuilder.py
+++ b/rpython/jit/backend/x86/callbuilder.py
@@ -56,6 +56,13 @@
self.restype = restype
self.current_esp = 0
+ def emit_no_collect(self):
+ """Emit a call that cannot collect."""
+ self.prepare_arguments()
+ self.emit_raw_call()
+ self.restore_esp()
+ self.load_result()
+
def emit(self):
"""Emit a regular call; not for CALL_RELEASE_GIL."""
self.prepare_arguments()
diff --git a/rpython/jit/backend/x86/regalloc.py
b/rpython/jit/backend/x86/regalloc.py
--- a/rpython/jit/backend/x86/regalloc.py
+++ b/rpython/jit/backend/x86/regalloc.py
@@ -1131,9 +1131,8 @@
# call memcpy()
self.rm.before_call()
self.xrm.before_call()
- self.assembler._emit_call(imm(self.assembler.memcpy_addr),
- [dstaddr_loc, srcaddr_loc, length_loc],
- can_collect=False)
+ self.assembler.simple_call_no_collect(imm(self.assembler.memcpy_addr),
+ [dstaddr_loc, srcaddr_loc, length_loc])
self.rm.possibly_free_var(length_box)
self.rm.possibly_free_var(dstaddr_box)
self.rm.possibly_free_var(srcaddr_box)
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit