зеркало из https://github.com/github/ruby.git
ruby/ruby.h: optimize rb_integer_type_p
* include/ruby/ruby.h (rb_integer_type_p): turn into macro to help clang based on old gcc to eliminate CSE. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56506 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
34ef129bd2
Коммит
8998c06461
|
@ -1,3 +1,8 @@
|
|||
Thu Oct 27 23:28:12 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* include/ruby/ruby.h (rb_integer_type_p): turn into macro to help
|
||||
clang based on old gcc to eliminate CSE.
|
||||
|
||||
Thu Oct 27 16:33:47 2016 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* tool/redmine-backporter.rb (rel): check the exception and show right
|
||||
|
|
|
@ -1480,6 +1480,17 @@ rb_obj_write(VALUE a, VALUE *slot, VALUE b, RB_UNUSED_VAR(const char *filename),
|
|||
|
||||
#define RUBY_INTEGER_UNIFICATION 1
|
||||
#define RB_INTEGER_TYPE_P(obj) rb_integer_type_p(obj)
|
||||
#if defined __GNUC__ && !GCC_VERSION_SINCE(4, 3, 0)
|
||||
/* clang 3.x (4.2 compatible) can't eliminate CSE of RB_BUILTIN_TYPE
|
||||
* in inline function and caller function */
|
||||
#define rb_integer_type_p(obj) \
|
||||
__extension__ ({ \
|
||||
const VALUE integer_type_obj = (obj); \
|
||||
(RB_FIXNUM_P(integer_type_obj) || \
|
||||
(!RB_SPECIAL_CONST_P(integer_type_obj) && \
|
||||
RB_BUILTIN_TYPE(integer_type_obj) == RUBY_T_BIGNUM)); \
|
||||
})
|
||||
#else
|
||||
static inline int
|
||||
rb_integer_type_p(VALUE obj)
|
||||
{
|
||||
|
@ -1487,6 +1498,7 @@ rb_integer_type_p(VALUE obj)
|
|||
(!RB_SPECIAL_CONST_P(obj) &&
|
||||
RB_BUILTIN_TYPE(obj) == RUBY_T_BIGNUM));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if SIZEOF_INT < SIZEOF_LONG
|
||||
# define RB_INT2NUM(v) RB_INT2FIX((int)(v))
|
||||
|
|
Загрузка…
Ссылка в новой задаче