ruby-changes:6397
From: nobu <ko1@a...>
Date: Mon, 7 Jul 2008 00:36:53 +0900 (JST)
Subject: [ruby-changes:6397] Ruby:r17913 (mvm): * bignum.c (big2str_power_cache): moved to VM specific data.
nobu 2008-07-07 00:35:14 +0900 (Mon, 07 Jul 2008) New Revision: 17913 Modified files: branches/mvm/ChangeLog branches/mvm/bignum.c branches/mvm/common.mk branches/mvm/private_object.h Log: * bignum.c (big2str_power_cache): moved to VM specific data. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=17913 Index: mvm/ChangeLog =================================================================== --- mvm/ChangeLog (revision 17912) +++ mvm/ChangeLog (revision 17913) @@ -1,3 +1,7 @@ +Mon Jul 7 00:35:10 2008 Nobuyoshi Nakada <nobu@r...> + + * bignum.c (big2str_power_cache): moved to VM specific data. + Mon Jul 7 00:17:21 2008 Nobuyoshi Nakada <nobu@r...> * io.c (struct argf): use defin and defout instead of rb_stdin and Index: mvm/common.mk =================================================================== --- mvm/common.mk (revision 17912) +++ mvm/common.mk (revision 17913) @@ -438,7 +438,7 @@ array.$(OBJEXT): {$(VPATH)}array.c $(RUBY_H_INCLUDES) \ {$(VPATH)}st.h {$(VPATH)}util.h bignum.$(OBJEXT): {$(VPATH)}bignum.c $(RUBY_H_INCLUDES) \ - {$(VPATH)}st.h + {$(VPATH)}st.h {$(VPATH)}private_object.h class.$(OBJEXT): {$(VPATH)}class.c $(RUBY_H_INCLUDES) \ {$(VPATH)}st.h {$(VPATH)}signal.h {$(VPATH)}node.h compar.$(OBJEXT): {$(VPATH)}compar.c $(RUBY_H_INCLUDES) \ Index: mvm/private_object.h =================================================================== --- mvm/private_object.h (revision 17912) +++ mvm/private_object.h (revision 17913) @@ -59,6 +59,9 @@ rb_vmkey_coverages, #define rb_vm_coverages (*rb_vm_specific_ptr(rb_vmkey_coverages)) + rb_vmkey_big2str_power_cache, +#define rb_big2str_power_cache (*rb_vm_specific_ptr(rb_vmkey_big2str_power_cache)) + ruby_builtin_object_count, ruby_private_object_count = ruby_builtin_object_count - ruby_private_object_vmkey_begin + 1 }; Index: mvm/bignum.c =================================================================== --- mvm/bignum.c (revision 17912) +++ mvm/bignum.c (revision 17913) @@ -10,6 +10,7 @@ **********************************************************************/ #include "ruby/ruby.h" +#include "private_object.h" #include <math.h> #include <float.h> @@ -752,12 +753,16 @@ #define KARATSUBA_DIGITS (1L<<LOG2_KARATSUBA_DIGITS) #define MAX_BIG2STR_TABLE_ENTRIES 64 -static VALUE big2str_power_cache[35][MAX_BIG2STR_TABLE_ENTRIES]; +typedef VALUE (*big2str_power_cache_t)[MAX_BIG2STR_TABLE_ENTRIES]; static void power_cache_init(void) { int i, j; + VALUE cache_value = rb_ary_new2(35 * MAX_BIG2STR_TABLE_ENTRIES); + big2str_power_cache_t big2str_power_cache = + (big2str_power_cache_t)RARRAY_PTR(cache_value); + for (i = 0; i < 35; ++i) { for (j = 0; j < MAX_BIG2STR_TABLE_ENTRIES; ++j) { big2str_power_cache[i][j] = Qnil; @@ -768,6 +773,10 @@ static inline VALUE power_cache_get_power0(int base, int i) { + VALUE cache_value = rb_big2str_power_cache; + big2str_power_cache_t big2str_power_cache = + (big2str_power_cache_t)RARRAY_PTR(cache_value); + if (NIL_P(big2str_power_cache[base - 2][i])) { big2str_power_cache[base - 2][i] = i == 0 ? rb_big_pow(rb_int2big(base), INT2FIX(KARATSUBA_DIGITS)) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/