Author: stian
Branch: math-improvements
Changeset: r92854:12d7e0578291
Date: 2017-10-26 18:48 +0200
http://bitbucket.org/pypy/pypy/changeset/12d7e0578291/
Log: uint128_t test and a tiny optimalization
diff --git a/rpython/rlib/rbigint.py b/rpython/rlib/rbigint.py
--- a/rpython/rlib/rbigint.py
+++ b/rpython/rlib/rbigint.py
@@ -849,6 +849,7 @@
else:
# Perform
size = self.numdigits() - 1
+
if size > 0:
rem = self.widedigit(size)
size -= 1
@@ -856,7 +857,7 @@
rem = ((rem << SHIFT) | self.digit(size)) % digit
size -= 1
else:
- rem = self.digit(0) % digit
+ rem = self.widedigit(0) % digit
if rem == 0:
return NULLRBIGINT
@@ -2091,7 +2092,7 @@
* result in z[0:m], and return the d bits shifted out of the top.
"""
- carry = 0
+ carry = _unsigned_widen_digit(0)
assert 0 <= d and d < SHIFT
i = 0
while i < m:
diff --git a/rpython/translator/c/test/test_typed.py
b/rpython/translator/c/test/test_typed.py
--- a/rpython/translator/c/test/test_typed.py
+++ b/rpython/translator/c/test/test_typed.py
@@ -955,6 +955,20 @@
res = f(217)
assert res == 305123851
+ def test_uint128(self):
+ if not hasattr(rffi, '__UINT128_T'):
+ py.test.skip("no '__uint128_t'")
+ def func(n):
+ x = rffi.cast(getattr(rffi, '__UINT128_T'), n)
+ x *= x
+ x *= x
+ x *= x
+ x *= x
+ return intmask(x >> 96)
+ f = self.getcompiled(func, [int])
+ res = f(217)
+ assert res == 305123851
+
def test_bool_2(self):
def func(n):
x = rffi.cast(lltype.Bool, n)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit