@@ -6992,40 +6992,31 @@ int_pow_tmp2(VALUE x, VALUE y, long mm, int nega_flg)
6992
6992
long tmp = 1L ;
6993
6993
long yy ;
6994
6994
#ifdef DLONG
6995
- DLONG const mmm = mm ;
6995
+ const DLONG m = mm ;
6996
+ long tmp2 = tmp ;
6996
6997
long xx = FIX2LONG (x );
6997
6998
# define MUL_MODULO (a , b , c ) (long)(((DLONG)(a) * (DLONG)(b)) % (c))
6998
-
6999
- for (/*NOP*/ ; ! FIXNUM_P (y ); y = rb_funcall (y , idGTGT , 1 , LONG2FIX (1L ))) {
7000
- if (RTEST (rb_int_odd_p (y ))) {
7001
- tmp = MUL_MODULO (tmp , xx , mmm );
7002
- }
7003
- xx = MUL_MODULO (xx , xx , mmm );
7004
- }
7005
- for (yy = FIX2LONG (y ); yy ; yy >>= 1L ) {
7006
- if (yy & 1L ) {
7007
- tmp = MUL_MODULO (tmp , xx , mmm );
7008
- }
7009
- xx = MUL_MODULO (xx , xx , mmm );
7010
- }
7011
6999
#else
7012
- VALUE const m = LONG2FIX (mm );
7000
+ const VALUE m = LONG2FIX (mm );
7013
7001
VALUE tmp2 = LONG2FIX (tmp );
7002
+ VALUE xx = x ;
7014
7003
# define MUL_MODULO (a , b , c ) rb_int_modulo(rb_fix_mul_fix((a), (b)), (c))
7004
+ #endif
7015
7005
7016
7006
for (/*NOP*/ ; ! FIXNUM_P (y ); y = rb_funcall (y , idGTGT , 1 , LONG2FIX (1L ))) {
7017
7007
if (RTEST (rb_int_odd_p (y ))) {
7018
- tmp2 = MUL_MODULO (tmp2 , x , m );
7008
+ tmp2 = MUL_MODULO (tmp2 , xx , m );
7019
7009
}
7020
- x = MUL_MODULO (x , x , m );
7010
+ xx = MUL_MODULO (xx , xx , m );
7021
7011
}
7022
7012
for (yy = FIX2LONG (y ); yy ; yy >>= 1L ) {
7023
7013
if (yy & 1L ) {
7024
- tmp2 = MUL_MODULO (tmp2 , x , m );
7014
+ tmp2 = MUL_MODULO (tmp2 , xx , m );
7025
7015
}
7026
- x = MUL_MODULO (x , x , m );
7016
+ xx = MUL_MODULO (xx , xx , m );
7027
7017
}
7028
7018
7019
+ #ifndef DLONG
7029
7020
tmp = FIX2LONG (tmp2 );
7030
7021
#endif
7031
7022
if (nega_flg && tmp ) {
0 commit comments