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