[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:1105

From: Tadashi Saito <shiba mail2.accsnet.ne.jp>
Date: Fri, 10 Nov 2006 01:10:58 +0900
Subject: [yarv-dev:1105] Re: merge with YARV

こんばんは、斎藤と申します。
極めてどうでもいいことなんですが、忘れないうちに。

On Sat, 04 Nov 2006 00:44:25 +0900
SASADA Koichi <ko1 atdot.net> wrote:

> ・YARV のソースレビュー

レビューって程のものじゃないんですけれど、気づいた所だけ、
GCC周りを少し調べました。

yarvcore.hで
- GCCじゃないときのUNLIKELY()が非常にまずそうです。LIKELY()も同様のスタ
  イルにしました(意図があったらごめんなさい)
- __builtin_expect()はGCC3かららしいので
    http://gcc.gnu.org/gcc-3.0/features.html
  チェックするようにしました

それで疑問はvm.hで
- 131行目
  > #if __GNUC__ && (__i386__ || __x86_64__) && __GNUC__ == 3
  の最後って、>= 3 でも可ではないのでしょうか? (or bug of 4.x?)
- 同じく143行目
  > #if OPT_DIRECT_THREADED_CODE
  の下に
  > /* for GCC 3.4.x */
  とあるので、ifに
    && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
  とか加えちゃった方がいいでしょうか。
- #if __GNUC__ と #ifdef __GNUC__ を書き分けている理由が分からなくて
  ごめんなさい。
  (古いコンパイラって前者を受け入れないのがあったんでしょうか?)


とりあえず前半のパッチです。

Index: yarvcore.h
===================================================================
--- yarvcore.h  (リビジョン 578)
+++ yarvcore.h  (作業コピー)
@@ -76,12 +76,12 @@
 #endif /* OPT_CALL_THREADED_CODE */

 /* likely */
-#ifdef __GCC__
+#if defined(__GCC__) && __GNUC__ >= 3
 #define LIKELY(x)   (__builtin_expect((x), 1))
 #define UNLIKELY(x) (__builtin_expect((x), 0))
 #else /* __GCC__ */
-#define LIKELY(x)   ((x) == 1)
-#define UNLIKELY(x) ((x) == 0)
+#define LIKELY(x)   (x)
+#define UNLIKELY(x) (x)
 #endif /* __GCC__ */

 #define YARVDEBUG 0


よろしくお願いします。

-- 
斎藤ただし

--
ML: yarv-dev quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

      1097 2006-11-04 00:44 [ko1 atdot.net       ] merge with YARV                         
->    1105 2006-11-10 01:10 ┗[shiba mail2.accsnet.]                                       
      1107 2006-11-14 11:29  ┗[ko1 atdot.net       ]