新城@筑波大学情報です。こんにちは。

In article <3989148news.pl@insigna.ie.u-ryukyu.ac.jp>
        kono@ie.u-ryukyu.ac.jp (Shinji KONO) writes:
> 河野真治 @ 琉球大学情報工学です。
> inline で欲しいのは、本来はプログラム変換でのspecialization
> であって、サブルーチンオーバヘッドではないはず。Specialiation
> は通常のサブルーチンコールでも出来るので、inlineは、
> なにか間違った選択だったと思います。

inline も、時代がたつと間違いに見えるようになるのでしょうね。
変数の register 宣言みたいに。ただ、register も inline もま
だまだ可愛いものです。プログラムの可読性は、そんなに下げない
し、普通は無視しても全然平気だから。#define よりは、inline 
の方が見やすいし。

この間、ふと Linux のソースを見ていて辛かったのは、likely() 
です。

include/linux/compiler.h:
------------------------------------------------------------

/* Somewhere in the middle of the GCC 2.96 development cycle, we implemented
   a mechanism by which the user can annotate likely branch directions and
   expect the blocks to be reordered appropriately.  Define __builtin_expect
   to nothing for earlier compilers.  */

#if __GNUC__ == 2 && __GNUC_MINOR__ < 96
#define __builtin_expect(x, expected_value) (x)
#endif

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)
------------------------------------------------------------

これを、if 文の中にかかれると、可読性の下がること下がること。
こんな感じ。

   for( ... )
   {
         ....
            if (unlikely(dentry->d_bucket != head))
                    break;
         ....
            if (likely(move_count == dentry->d_move_count)) {
                    if (!d_unhashed(dentry)) {
                            atomic_inc(&dentry->d_count);
                            found = dentry;
                    }
            }
    }

lilely() と unlikely() は、やめてくれって、というよりは、
「何間考えているんだ、このボケ」って感じ。こんなの人間がやる
ことじゃないです。

まあ、likely(), unlikely() も、まあ inline とか register と
同じで、まったく無視してもいいんだけど、無視するのは、辛いわ
けです。英語nativeなら平気なんですかね。

そもそも、コンパイル時の静的な分岐予測って、効くんですかね。
最近のプロセッサは、動的な分岐予測はしているわけですよね。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\