[pypy-commit] pypy default: Issue #2889
arigo
pypy.commits at gmail.com
Sat Sep 15 16:34:43 EDT 2018
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r95119:83dd3becaa5f
Date: 2018-09-15 22:34 +0200
http://bitbucket.org/pypy/pypy/changeset/83dd3becaa5f/
Log: Issue #2889
Move jit.dont_look_inside around a few more instructions. In this
way, the JIT residual call is not going to invoke a function that
returns a tuple. Instead, the tuple-returning calls are all done as
C code, inlined into each other.
diff --git a/pypy/module/_cffi_backend/ctypeptr.py b/pypy/module/_cffi_backend/ctypeptr.py
--- a/pypy/module/_cffi_backend/ctypeptr.py
+++ b/pypy/module/_cffi_backend/ctypeptr.py
@@ -315,9 +315,7 @@
if isinstance(self.ctitem, ctypeprim.W_CTypePrimitiveBool):
self._must_be_string_of_zero_or_one(value)
keepalives[i] = value
- buf, buf_flag = rffi.get_nonmovingbuffer_final_null(value)
- rffi.cast(rffi.CCHARPP, cdata)[0] = buf
- return ord(buf_flag) # 4, 5 or 6
+ return misc.write_string_as_charp(cdata, value)
#
if (space.isinstance_w(w_init, space.w_list) or
space.isinstance_w(w_init, space.w_tuple)):
diff --git a/pypy/module/_cffi_backend/misc.py b/pypy/module/_cffi_backend/misc.py
--- a/pypy/module/_cffi_backend/misc.py
+++ b/pypy/module/_cffi_backend/misc.py
@@ -102,6 +102,12 @@
def write_raw_longdouble_data(target, source):
rffi.cast(rffi.LONGDOUBLEP, target)[0] = source
+ at jit.dont_look_inside # lets get_nonmovingbuffer_final_null be inlined
+def write_string_as_charp(target, string):
+ buf, buf_flag = rffi.get_nonmovingbuffer_final_null(string)
+ rffi.cast(rffi.CCHARPP, target)[0] = buf
+ return ord(buf_flag) # 4, 5 or 6
+
# ____________________________________________________________
sprintf_longdouble = rffi.llexternal(
More information about the pypy-commit
mailing list