Skip to content

Commit

Permalink
* bignum.c (bary_sq_fast): Specialize the last iteration of the
Browse files Browse the repository at this point in the history
  outer loop.
  (bigfixize): A condition simplified.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
akr committed Jul 18, 2013
1 parent 4595d9a commit 2314c1b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
6 changes: 6 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
Thu Jul 18 21:30:50 2013 Tanaka Akira <akr@fsij.org>

* bignum.c (bary_sq_fast): Specialize the last iteration of the
outer loop.
(bigfixize): A condition simplified.

Thu Jul 18 21:15:41 2013 Masaki Matsushita <glass.saga@gmail.com>

* array.c (rb_ary_equal): compare RARRAY_PTR() for performance
Expand Down
25 changes: 20 additions & 5 deletions bignum.c
Original file line number Diff line number Diff line change
Expand Up @@ -1605,7 +1605,11 @@ bary_sq_fast(BDIGIT *zds, size_t zn, BDIGIT *xds, size_t xn)
assert(xn * 2 <= zn);

BDIGITS_ZERO(zds, zn);
for (i = 0; i < xn; i++) {

if (xn == 0)
return;

for (i = 0; i < xn-1; i++) {
v = (BDIGIT_DBL)xds[i];
if (!v)
continue;
Expand All @@ -1625,11 +1629,22 @@ bary_sq_fast(BDIGIT *zds, size_t zn, BDIGIT *xds, size_t xn)
c += (BDIGIT_DBL)zds[i + xn];
zds[i + xn] = BIGLO(c);
c = BIGDN(c);
assert(c == 0 || i != xn-1);
if (c && i != xn-1)
if (c)
zds[i + xn + 1] += (BDIGIT)c;
}
}

/* i == xn-1 */
v = (BDIGIT_DBL)xds[i];
if (!v)
return;
c = (BDIGIT_DBL)zds[i + i] + v * v;
zds[i + i] = BIGLO(c);
c = BIGDN(c);
if (c) {
c += (BDIGIT_DBL)zds[i + xn];
zds[i + xn] = BIGLO(c);
}
}

VALUE
Expand Down Expand Up @@ -2336,11 +2351,11 @@ bigfixize(VALUE x)
int i = (int)len;
u = 0;
while (i--) {
u = (long)(BIGUP(u) + ds[i]);
u = (unsigned long)(BIGUP(u) + ds[i]);
}
}
#else /* SIZEOF_BDIGITS >= SIZEOF_LONG */
if (1 < len || LONG_MAX < ds[0])
if (1 < len)
goto return_big;
else
u = ds[0];
Expand Down

0 comments on commit 2314c1b

Please sign in to comment.