[前][次][番号順一覧][スレッド一覧]

ruby-changes:24781

From: ko1 <ko1@a...>
Date: Mon, 27 Aug 2012 18:22:32 +0900 (JST)
Subject: [ruby-changes:24781] ko1:r36832 (trunk): * include/ruby/ruby.h (rb_float_value): optimize it.

ko1	2012-08-27 18:22:21 +0900 (Mon, 27 Aug 2012)

  New Revision: 36832

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36832

  Log:
    * include/ruby/ruby.h (rb_float_value): optimize it.
      This technique was pointed by shinichiro.hamaji
      <http://shinh.skr.jp/m/?date=20120825#p02>.

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/ruby.h

Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 36831)
+++ include/ruby/ruby.h	(revision 36832)
@@ -733,10 +733,7 @@
 rb_float_value(VALUE v)
 {
     if (FLONUM_P(v)) {
-	if (v == (VALUE)0x8000000000000002) {
-	    return 0.0;
-	}
-	else {
+	if (v != (VALUE)0x8000000000000002) { /* LIKELY */
 	    union {
 		double d;
 		VALUE v;
@@ -746,9 +743,12 @@
 	    /* e: xx1... -> 011... */
 	    /*    xx0... -> 100... */
 	    /*      ^b63           */
-	    t.v = RUBY_BIT_ROTR(((b63 ^ 1) << 1) | b63 | (v & ~0x03), 3);
+	    t.v = RUBY_BIT_ROTR(2 - b63 | (v & ~0x03), 3);
 	    return t.d;
 	}
+	else {
+	    return 0.0;
+	}
     }
     else {
 	return ((struct RFloat *)v)->float_value;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 36831)
+++ ChangeLog	(revision 36832)
@@ -1,3 +1,9 @@
+Mon Aug 27 18:19:36 2012  Koichi Sasada  <ko1@a...>
+
+	* include/ruby/ruby.h (rb_float_value): optimize it.
+	  This technique was pointed by shinichiro.hamaji
+	  <http://shinh.skr.jp/m/?date=20120825#p02>.
+
 Mon Aug 27 15:08:25 2012  Yuki Yugui Sonoda  <yugui@g...>
 
 	* common.mk (vm_trace.o): Added a missing dependency.

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]