Author: stian Branch: improve-rbigint Changeset: r56351:1f3529e0e23b Date: 2012-07-06 07:02 +0200 http://bitbucket.org/pypy/pypy/changeset/1f3529e0e23b/
Log: Special case invert of 0, and save one creation when inverting. This makes floordiv quicker diff --git a/pypy/rlib/rbigint.py b/pypy/rlib/rbigint.py --- a/pypy/rlib/rbigint.py +++ b/pypy/rlib/rbigint.py @@ -435,7 +435,6 @@ else: result = _x_add(self, other) result.sign *= self.sign - result._normalize() return result @jit.elidable @@ -684,10 +683,17 @@ return rbigint(self._digits, -self.sign) def abs(self): + if self.sign != -1: + return self return rbigint(self._digits, abs(self.sign)) def invert(self): #Implement ~x as -(x + 1) - return self.add(ONERBIGINT).neg() + if self.sign == 0: + return ONENEGATIVERBIGINT + + ret = self.add(ONERBIGINT) + ret.sign = -ret.sign + return ret @jit.elidable def lshift(self, int_other): diff --git a/pypy/translator/goal/targetbigintbenchmark.py b/pypy/translator/goal/targetbigintbenchmark.py --- a/pypy/translator/goal/targetbigintbenchmark.py +++ b/pypy/translator/goal/targetbigintbenchmark.py @@ -29,21 +29,21 @@ Sum: 901.7231250000001 Pypy with improvements: - 2.892875 - 2.263349 - 2.425365 - 1.579653 - 4.005316 - 9.579625 - 1.774452 - 4.021076 - 4.844961 - 6.432300 - 0.038368 - 3.624531 - 8.156838 - 4.990594 - Sum: 56.629303 + 2.887265 + 2.253981 + 2.480497 + 1.572440 + 3.941691 + 9.530685 + 1.786801 + 4.046154 + 4.844644 + 6.412511 + 0.038662 + 3.629173 + 8.155449 + 4.997199 + Sum: 56.577152 A pure python form of those tests where also run Improved pypy | Pypy | CPython 2.7.3 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit