Author: Armin Rigo <ar...@tunes.org>
Branch: py3.6
Changeset: r97026:6667f0f93e93
Date: 2019-07-25 14:09 +0200
http://bitbucket.org/pypy/pypy/changeset/6667f0f93e93/

Log:    hg merge default

diff --git a/rpython/jit/backend/aarch64/opassembler.py 
b/rpython/jit/backend/aarch64/opassembler.py
--- a/rpython/jit/backend/aarch64/opassembler.py
+++ b/rpython/jit/backend/aarch64/opassembler.py
@@ -297,6 +297,16 @@
         arg, res = arglocs
         self.mc.FSQRT_dd(res.value, arg.value)
 
+    def threadlocalref_get(self, op, arglocs):
+        res_loc, = arglocs
+        ofs_loc = self.imm(op.getarg(1).getint())
+        calldescr = op.getdescr()
+        ofs = self.saved_threadlocal_addr
+        self.load_reg(self.mc, res_loc, r.sp, ofs)
+        scale = get_scale(calldescr.get_result_size())
+        signed = (calldescr.is_result_signed() != 0)
+        self._load_from_mem(res_loc, res_loc, ofs_loc, scale, signed)
+
     emit_op_float_lt = gen_float_comp_op('float_lt', c.VFP_LT)
     emit_op_float_le = gen_float_comp_op('float_le', c.VFP_LE)
     emit_op_float_eq = gen_float_comp_op('float_eq', c.EQ)
diff --git a/rpython/jit/backend/aarch64/regalloc.py 
b/rpython/jit/backend/aarch64/regalloc.py
--- a/rpython/jit/backend/aarch64/regalloc.py
+++ b/rpython/jit/backend/aarch64/regalloc.py
@@ -506,6 +506,10 @@
         res = self.force_allocate_reg(op)
         return [loc1, res]
 
+    def _prepare_threadlocalref_get(self, op):
+        res_loc = self.force_allocate_reg(op)
+        return [res_loc]
+
     prepare_op_convert_float_bytes_to_longlong = prepare_unary
     prepare_op_convert_longlong_bytes_to_float = prepare_unary
 
@@ -583,10 +587,10 @@
                 args = self._prepare_op_math_sqrt(op)
                 self.assembler.math_sqrt(op, args)
                 return
-            #elif oopspecindex == EffectInfo.OS_THREADLOCALREF_GET:
-            #    args = self._prepare_threadlocalref_get(op, fcond)
-            #    self.perform_extra(op, args, fcond)
-            #    return
+            elif oopspecindex == EffectInfo.OS_THREADLOCALREF_GET:
+                args = self._prepare_threadlocalref_get(op)
+                self.assembler.threadlocalref_get(op, args)
+                return
             #elif oopspecindex == EffectInfo.OS_MATH_READ_TIMESTAMP:
             #    ...
         return self._prepare_call(op)
diff --git a/rpython/rtyper/lltypesystem/rffi.py 
b/rpython/rtyper/lltypesystem/rffi.py
--- a/rpython/rtyper/lltypesystem/rffi.py
+++ b/rpython/rtyper/lltypesystem/rffi.py
@@ -1365,12 +1365,11 @@
 
 class scoped_nonmoving_unicodebuffer:
     def __init__(self, data):
-        self.data = data
+        self.buf, self.llobj, self.flag = get_nonmoving_unicodebuffer_ll(data)
     def __enter__(self):
-        self.buf, self.flag = get_nonmoving_unicodebuffer(self.data)
         return self.buf
     def __exit__(self, *args):
-        free_nonmoving_unicodebuffer(self.data, self.buf, self.flag)
+        free_nonmoving_unicodebuffer_ll(self.buf, self.llobj, self.flag)
     __init__._always_inline_ = 'try'
     __enter__._always_inline_ = 'try'
     __exit__._always_inline_ = 'try'
diff --git a/rpython/rtyper/lltypesystem/test/test_rffi.py 
b/rpython/rtyper/lltypesystem/test/test_rffi.py
--- a/rpython/rtyper/lltypesystem/test/test_rffi.py
+++ b/rpython/rtyper/lltypesystem/test/test_rffi.py
@@ -917,6 +917,15 @@
         assert buf[2] == 'r'
         assert buf[3] == '\x00'
 
+def test_scoped_nonmoving_unicodebuffer():
+    s = u'bar'
+    with scoped_nonmoving_unicodebuffer(s) as buf:
+        assert buf[0] == u'b'
+        assert buf[1] == u'a'
+        assert buf[2] == u'r'
+        with py.test.raises(IndexError):
+            buf[3]
+
 def test_wcharp2utf8n():
     w = 'hello\x00\x00\x00\x00'
     u, i = wcharp2utf8n(w, len(w))
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to