* include/ruby/ruby.h (NUM2LONG): added GCC specific optimization.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23570 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2009-05-25 20:38:06 +00:00
parent 762fec4946
commit a273dc9b16
2 changed files with 12 additions and 2 deletions

View File

@ -1,3 +1,7 @@
Tue May 26 05:38:03 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby/ruby.h (NUM2LONG): added GCC specific optimization.
Tue May 26 03:41:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> Tue May 26 03:41:29 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* time.c (rb_gmtime, rb_localtime): gmtime and localtime return * time.c (rb_gmtime, rb_localtime): gmtime and localtime return

View File

@ -433,11 +433,17 @@ void rb_set_errinfo(VALUE);
SIGNED_VALUE rb_num2long(VALUE); SIGNED_VALUE rb_num2long(VALUE);
VALUE rb_num2ulong(VALUE); VALUE rb_num2ulong(VALUE);
#define NUM2LONG_internal(x) (FIXNUM_P(x) ? FIX2LONG(x) : rb_num2long(x))
#ifdef __GNUC__
#define NUM2LONG(x) \
__extension__ ({VALUE num2long_x = (x); NUM2LONG_internal(num2long_x);})
#else
static inline long static inline long
NUM2LONG(VALUE x) NUM2LONG(VALUE x)
{ {
return FIXNUM_P(x) ? FIX2LONG(x) : rb_num2long(x); return NUM2LONG_internal(x);
} }
#endif
#define NUM2ULONG(x) rb_num2ulong((VALUE)x) #define NUM2ULONG(x) rb_num2ulong((VALUE)x)
#if SIZEOF_INT < SIZEOF_LONG #if SIZEOF_INT < SIZEOF_LONG
long rb_num2int(VALUE); long rb_num2int(VALUE);
@ -672,7 +678,7 @@ NORETURN(void rb_out_of_int(SIGNED_VALUE num));
int i = (int)(n); \ int i = (int)(n); \
if ((long)i != (n)) rb_out_of_int(n) if ((long)i != (n)) rb_out_of_int(n)
#ifdef __GNUC__ #ifdef __GNUC__
#define rb_long2int(i2l_n) ({rb_long2int_internal(i2l_n, i2l_i); i2l_i;}) #define rb_long2int(i2l_n) __extension__ ({rb_long2int_internal(i2l_n, i2l_i); i2l_i;})
#else #else
static inline int static inline int
rb_long2int(long n) {rb_long2int_internal(n, i); return i;} rb_long2int(long n) {rb_long2int_internal(n, i); return i;}