mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* bignum.c (bary_sq_fast): Specialize the last iteration of the
outer loop. (bigfixize): A condition simplified. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
4595d9a3c9
commit
2314c1bf47
2 changed files with 26 additions and 5 deletions
|
@ -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>
|
Thu Jul 18 21:15:41 2013 Masaki Matsushita <glass.saga@gmail.com>
|
||||||
|
|
||||||
* array.c (rb_ary_equal): compare RARRAY_PTR() for performance
|
* array.c (rb_ary_equal): compare RARRAY_PTR() for performance
|
||||||
|
|
25
bignum.c
25
bignum.c
|
@ -1605,7 +1605,11 @@ bary_sq_fast(BDIGIT *zds, size_t zn, BDIGIT *xds, size_t xn)
|
||||||
assert(xn * 2 <= zn);
|
assert(xn * 2 <= zn);
|
||||||
|
|
||||||
BDIGITS_ZERO(zds, 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];
|
v = (BDIGIT_DBL)xds[i];
|
||||||
if (!v)
|
if (!v)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1625,11 +1629,22 @@ bary_sq_fast(BDIGIT *zds, size_t zn, BDIGIT *xds, size_t xn)
|
||||||
c += (BDIGIT_DBL)zds[i + xn];
|
c += (BDIGIT_DBL)zds[i + xn];
|
||||||
zds[i + xn] = BIGLO(c);
|
zds[i + xn] = BIGLO(c);
|
||||||
c = BIGDN(c);
|
c = BIGDN(c);
|
||||||
assert(c == 0 || i != xn-1);
|
if (c)
|
||||||
if (c && i != xn-1)
|
|
||||||
zds[i + xn + 1] += (BDIGIT)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
|
VALUE
|
||||||
|
@ -2336,11 +2351,11 @@ bigfixize(VALUE x)
|
||||||
int i = (int)len;
|
int i = (int)len;
|
||||||
u = 0;
|
u = 0;
|
||||||
while (i--) {
|
while (i--) {
|
||||||
u = (long)(BIGUP(u) + ds[i]);
|
u = (unsigned long)(BIGUP(u) + ds[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* SIZEOF_BDIGITS >= SIZEOF_LONG */
|
#else /* SIZEOF_BDIGITS >= SIZEOF_LONG */
|
||||||
if (1 < len || LONG_MAX < ds[0])
|
if (1 < len)
|
||||||
goto return_big;
|
goto return_big;
|
||||||
else
|
else
|
||||||
u = ds[0];
|
u = ds[0];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue