[pypy-commit] pypy default: Rename the RPython helpers from ll_int_floordiv() to ll_int_py_div(),
arigo
pypy.commits at gmail.com
Wed Jun 8 16:37:38 EDT 2016
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r85043:fbfec7254a35
Date: 2016-06-08 21:26 +0200
http://bitbucket.org/pypy/pypy/changeset/fbfec7254a35/
Log: Rename the RPython helpers from ll_int_floordiv() to
ll_int_py_div(), because they are doing Python-style rounding,
unlike llop.int_floordiv().
diff --git a/pypy/module/pypyjit/test_pypy_c/test_string.py b/pypy/module/pypyjit/test_pypy_c/test_string.py
--- a/pypy/module/pypyjit/test_pypy_c/test_string.py
+++ b/pypy/module/pypyjit/test_pypy_c/test_string.py
@@ -23,7 +23,7 @@
guard_true(i14, descr=...)
guard_not_invalidated(descr=...)
i16 = int_eq(i6, %d)
- i19 = call_i(ConstClass(ll_int_mod__Signed_Signed), i6, i10, descr=<Calli . ii EF=0 OS=14>)
+ i19 = call_i(ConstClass(ll_int_py_mod__Signed_Signed), i6, i10, descr=<Calli . ii EF=0 OS=14>)
i21 = int_lt(i19, 0)
guard_false(i21, descr=...)
i22 = int_ge(i19, i10)
diff --git a/rpython/jit/codewriter/support.py b/rpython/jit/codewriter/support.py
--- a/rpython/jit/codewriter/support.py
+++ b/rpython/jit/codewriter/support.py
@@ -252,7 +252,7 @@
def _ll_2_int_floordiv(x, y):
# this is used only if the RPython program uses llop.int_floordiv()
# explicitly. For 'a // b', see _handle_int_special() in jtransform.py.
- # This is the reverse of rpython.rtyper.rint.ll_int_floordiv(), i.e.
+ # This is the reverse of rpython.rtyper.rint.ll_int_py_div(), i.e.
# the same logic as rpython.rtyper.lltypesystem.opimpl.op_int_floordiv
# but written in a no-branch style.
r = x // y
diff --git a/rpython/jit/codewriter/test/test_flatten.py b/rpython/jit/codewriter/test/test_flatten.py
--- a/rpython/jit/codewriter/test/test_flatten.py
+++ b/rpython/jit/codewriter/test/test_flatten.py
@@ -478,7 +478,7 @@
except ZeroDivisionError:
return -42
self.encoding_test(f, [7, 2], """
- residual_call_ir_i $<* fn ll_int_floordiv_ovf_zer__Signed_Signed>, I[%i0, %i1], R[], <Descr> -> %i2
+ residual_call_ir_i $<* fn ll_int_py_div_ovf_zer__Signed_Signed>, I[%i0, %i1], R[], <Descr> -> %i2
-live-
catch_exception L1
int_return %i2
@@ -505,7 +505,7 @@
return 42
# XXX so far, this really produces a int_mod_ovf_zer...
self.encoding_test(f, [7, 2], """
- residual_call_ir_i $<* fn ll_int_mod_ovf_zer__Signed_Signed>, I[%i0, %i1], R[], <Descr> -> %i2
+ residual_call_ir_i $<* fn ll_int_py_mod_ovf_zer__Signed_Signed>, I[%i0, %i1], R[], <Descr> -> %i2
-live-
catch_exception L1
int_return %i2
diff --git a/rpython/rtyper/rint.py b/rpython/rtyper/rint.py
--- a/rpython/rtyper/rint.py
+++ b/rpython/rtyper/rint.py
@@ -236,11 +236,11 @@
return _rtype_template(hop, 'mul_ovf')
def rtype_floordiv(_, hop):
- return _rtype_call_helper(hop, 'floordiv', [ZeroDivisionError])
+ return _rtype_call_helper(hop, 'py_div', [ZeroDivisionError])
rtype_inplace_floordiv = rtype_floordiv
def rtype_floordiv_ovf(_, hop):
- return _rtype_call_helper(hop, 'floordiv_ovf', [ZeroDivisionError])
+ return _rtype_call_helper(hop, 'py_div_ovf', [ZeroDivisionError])
# turn 'div' on integers into 'floordiv'
rtype_div = rtype_floordiv
@@ -250,11 +250,11 @@
# 'def rtype_truediv' is delegated to the superclass FloatRepr
def rtype_mod(_, hop):
- return _rtype_call_helper(hop, 'mod', [ZeroDivisionError])
+ return _rtype_call_helper(hop, 'py_mod', [ZeroDivisionError])
rtype_inplace_mod = rtype_mod
def rtype_mod_ovf(_, hop):
- return _rtype_call_helper(hop, 'mod_ovf', [ZeroDivisionError])
+ return _rtype_call_helper(hop, 'py_mod_ovf', [ZeroDivisionError])
def rtype_xor(_, hop):
return _rtype_template(hop, 'xor')
@@ -319,7 +319,7 @@
vlist = hop.inputargs(repr, repr2)
prefix = repr.opprefix
- if '_ovf' in func or func.startswith(('mod', 'floordiv')):
+ if '_ovf' in func or func.startswith(('py_mod', 'py_div')):
if prefix+func not in ('int_add_ovf', 'int_add_nonneg_ovf',
'int_sub_ovf', 'int_mul_ovf'):
raise TyperError("%r should not be used here any more" % (func,))
@@ -353,7 +353,7 @@
any_implicit_exception = True
if not any_implicit_exception:
- if not func.startswith(('mod', 'floordiv')):
+ if not func.startswith(('py_mod', 'py_div')):
return _rtype_template(hop, func)
repr = hop.r_result
@@ -388,7 +388,7 @@
# ---------- floordiv ----------
@jit.oopspec("int.py_div(x, y)")
-def ll_int_floordiv(x, y):
+def ll_int_py_div(x, y):
# Python, and RPython, assume that integer division truncates
# towards -infinity. However, in C, integer division truncates
# towards 0. So assuming that, we need to apply a correction
@@ -400,159 +400,159 @@
return r + (u >> INT_BITS_1)
@jit.oopspec("int.py_div(x, y)")
-def ll_int_floordiv_nonnegargs(x, y):
+def ll_int_py_div_nonnegargs(x, y):
from rpython.rlib.debug import ll_assert
r = llop.int_floordiv(Signed, x, y) # <= truncates like in C
- ll_assert(r >= 0, "int_floordiv_nonnegargs(): one arg is negative")
+ ll_assert(r >= 0, "int_py_div_nonnegargs(): one arg is negative")
return r
-def ll_int_floordiv_zer(x, y):
+def ll_int_py_div_zer(x, y):
if y == 0:
raise ZeroDivisionError("integer division")
- return ll_int_floordiv(x, y)
+ return ll_int_py_div(x, y)
-def ll_int_floordiv_ovf(x, y):
+def ll_int_py_div_ovf(x, y):
# JIT: intentionally not short-circuited to produce only one guard
# and to remove the check fully if one of the arguments is known
if (x == -sys.maxint - 1) & (y == -1):
raise OverflowError("integer division")
- return ll_int_floordiv(x, y)
+ return ll_int_py_div(x, y)
-def ll_int_floordiv_ovf_zer(x, y):
+def ll_int_py_div_ovf_zer(x, y):
if y == 0:
raise ZeroDivisionError("integer division")
- return ll_int_floordiv_ovf(x, y)
+ return ll_int_py_div_ovf(x, y)
@jit.oopspec("int.udiv(x, y)")
-def ll_uint_floordiv(x, y):
+def ll_uint_py_div(x, y):
return llop.uint_floordiv(Unsigned, x, y)
-def ll_uint_floordiv_zer(x, y):
+def ll_uint_py_div_zer(x, y):
if y == 0:
raise ZeroDivisionError("unsigned integer division")
- return ll_uint_floordiv(x, y)
+ return ll_uint_py_div(x, y)
if SignedLongLong == Signed:
- ll_llong_floordiv = ll_int_floordiv
- ll_llong_floordiv_zer = ll_int_floordiv_zer
- ll_ullong_floordiv = ll_uint_floordiv
- ll_ullong_floordiv_zer = ll_uint_floordiv_zer
+ ll_llong_py_div = ll_int_py_div
+ ll_llong_py_div_zer = ll_int_py_div_zer
+ ll_ullong_py_div = ll_uint_py_div
+ ll_ullong_py_div_zer = ll_uint_py_div_zer
else:
@jit.dont_look_inside
- def ll_llong_floordiv(x, y):
+ def ll_llong_py_div(x, y):
r = llop.llong_floordiv(SignedLongLong, x, y) # <= truncates like in C
p = r * y
if y < 0: u = p - x
else: u = x - p
return r + (u >> LLONG_BITS_1)
- def ll_llong_floordiv_zer(x, y):
+ def ll_llong_py_div_zer(x, y):
if y == 0:
raise ZeroDivisionError("longlong division")
- return ll_llong_floordiv(x, y)
+ return ll_llong_py_div(x, y)
@jit.dont_look_inside
- def ll_ullong_floordiv(x, y):
+ def ll_ullong_py_div(x, y):
return llop.ullong_floordiv(UnsignedLongLong, x, y)
- def ll_ullong_floordiv_zer(x, y):
+ def ll_ullong_py_div_zer(x, y):
if y == 0:
raise ZeroDivisionError("unsigned longlong division")
- return ll_ullong_floordiv(x, y)
+ return ll_ullong_py_div(x, y)
@jit.dont_look_inside
-def ll_lllong_floordiv(x, y):
+def ll_lllong_py_div(x, y):
r = llop.lllong_floordiv(SignedLongLongLong, x, y) # <= truncates like in C
p = r * y
if y < 0: u = p - x
else: u = x - p
return r + (u >> LLLONG_BITS_1)
-def ll_lllong_floordiv_zer(x, y):
+def ll_lllong_py_div_zer(x, y):
if y == 0:
raise ZeroDivisionError("longlonglong division")
- return ll_lllong_floordiv(x, y)
+ return ll_lllong_py_div(x, y)
# ---------- mod ----------
@jit.oopspec("int.py_mod(x, y)")
-def ll_int_mod(x, y):
+def ll_int_py_mod(x, y):
r = llop.int_mod(Signed, x, y) # <= truncates like in C
if y < 0: u = -r
else: u = r
return r + (y & (u >> INT_BITS_1))
@jit.oopspec("int.py_mod(x, y)")
-def ll_int_mod_nonnegargs(x, y):
+def ll_int_py_mod_nonnegargs(x, y):
from rpython.rlib.debug import ll_assert
r = llop.int_mod(Signed, x, y) # <= truncates like in C
- ll_assert(r >= 0, "int_mod_nonnegargs(): one arg is negative")
+ ll_assert(r >= 0, "int_py_mod_nonnegargs(): one arg is negative")
return r
-def ll_int_mod_zer(x, y):
+def ll_int_py_mod_zer(x, y):
if y == 0:
raise ZeroDivisionError
- return ll_int_mod(x, y)
+ return ll_int_py_mod(x, y)
-def ll_int_mod_ovf(x, y):
- # see comment in ll_int_floordiv_ovf
+def ll_int_py_mod_ovf(x, y):
+ # see comment in ll_int_py_div_ovf
if (x == -sys.maxint - 1) & (y == -1):
raise OverflowError
- return ll_int_mod(x, y)
+ return ll_int_py_mod(x, y)
-def ll_int_mod_ovf_zer(x, y):
+def ll_int_py_mod_ovf_zer(x, y):
if y == 0:
raise ZeroDivisionError
- return ll_int_mod_ovf(x, y)
+ return ll_int_py_mod_ovf(x, y)
@jit.oopspec("int.umod(x, y)")
-def ll_uint_mod(x, y):
+def ll_uint_py_mod(x, y):
return llop.uint_mod(Unsigned, x, y)
-def ll_uint_mod_zer(x, y):
+def ll_uint_py_mod_zer(x, y):
if y == 0:
raise ZeroDivisionError
- return ll_uint_mod(x, y)
+ return ll_uint_py_mod(x, y)
if SignedLongLong == Signed:
- ll_llong_mod = ll_int_mod
- ll_llong_mod_zer = ll_int_mod_zer
- ll_ullong_mod = ll_uint_mod
- ll_ullong_mod_zer = ll_uint_mod_zer
+ ll_llong_py_mod = ll_int_py_mod
+ ll_llong_py_mod_zer = ll_int_py_mod_zer
+ ll_ullong_py_mod = ll_uint_py_mod
+ ll_ullong_py_mod_zer = ll_uint_py_mod_zer
else:
@jit.dont_look_inside
- def ll_llong_mod(x, y):
+ def ll_llong_py_mod(x, y):
r = llop.llong_mod(SignedLongLong, x, y) # <= truncates like in C
if y < 0: u = -r
else: u = r
return r + (y & (u >> LLONG_BITS_1))
- def ll_llong_mod_zer(x, y):
+ def ll_llong_py_mod_zer(x, y):
if y == 0:
raise ZeroDivisionError
- return ll_llong_mod(x, y)
+ return ll_llong_py_mod(x, y)
@jit.dont_look_inside
- def ll_ullong_mod(x, y):
+ def ll_ullong_py_mod(x, y):
return llop.ullong_mod(UnsignedLongLong, x, y)
- def ll_ullong_mod_zer(x, y):
+ def ll_ullong_py_mod_zer(x, y):
if y == 0:
raise ZeroDivisionError
return llop.ullong_mod(UnsignedLongLong, x, y)
@jit.dont_look_inside
-def ll_lllong_mod(x, y):
+def ll_lllong_py_mod(x, y):
r = llop.lllong_mod(SignedLongLongLong, x, y) # <= truncates like in C
if y < 0: u = -r
else: u = r
return r + (y & (u >> LLLONG_BITS_1))
-def ll_lllong_mod_zer(x, y):
+def ll_lllong_py_mod_zer(x, y):
if y == 0:
raise ZeroDivisionError
- return ll_lllong_mod(x, y)
+ return ll_lllong_py_mod(x, y)
# ---------- lshift, neg, abs ----------
diff --git a/rpython/rtyper/test/test_rint.py b/rpython/rtyper/test/test_rint.py
--- a/rpython/rtyper/test/test_rint.py
+++ b/rpython/rtyper/test/test_rint.py
@@ -390,7 +390,7 @@
res = self.interpret(f, [sys.maxint])
assert res == 0
- def test_int_floordiv_nonnegargs(self):
+ def test_int_py_div_nonnegargs(self):
def f(x, y):
assert x >= 0
assert y >= 0
@@ -398,7 +398,7 @@
res = self.interpret(f, [1234567, 123])
assert res == 1234567 // 123
- def test_int_mod_nonnegargs(self):
+ def test_int_py_mod_nonnegargs(self):
def f(x, y):
assert x >= 0
assert y >= 0
diff --git a/rpython/translator/test/test_simplify.py b/rpython/translator/test/test_simplify.py
--- a/rpython/translator/test/test_simplify.py
+++ b/rpython/translator/test/test_simplify.py
@@ -55,7 +55,7 @@
graph, _ = translate(f, [int, int], backend_optimize=False)
assert len(graph.startblock.operations) == 1
assert graph.startblock.operations[0].opname == 'direct_call'
- assert 'int_floordiv_ovf_zer' in repr(
+ assert 'int_py_div_ovf_zer' in repr(
graph.startblock.operations[0].args[0].value)
assert len(graph.startblock.exits) == 3
assert [link.target.operations for link in graph.startblock.exits[1:]] == \
@@ -73,7 +73,7 @@
graph, _ = translate(f, [int, int], backend_optimize=False)
assert len(graph.startblock.operations) == 1
assert graph.startblock.operations[0].opname == 'direct_call'
- assert 'int_floordiv_ovf_zer' in repr(
+ assert 'int_py_div_ovf_zer' in repr(
graph.startblock.operations[0].args[0].value)
assert len(graph.startblock.exits) == 3
assert [link.target.operations for link in graph.startblock.exits[1:]] == \
More information about the pypy-commit
mailing list