まあ、待て屋。(64ビット版)
Thu 23 Aug 2007


* パフォーマンスに関するメモ

AMD64 では、ALU 版の方が速いです。
Core2 マイクロアーキテクチャでは、やはり XMM 版の方が速いです。



* いじりかた

** Windows の場合

現時点では64ビットアプリ作成環境が限られています。
そのうち非 MSFT 環境でビルドできるようになるといいなと希望を持ってます。
私は Visual Studio 8 を使ってみました。
参考までに、200509版は、MSFT 配布の VC Toolkit 2003 を利用していました。

プリプロセッサシンボル USE_64_XMM(SSE2版) もしくは USE_64 (ALU版) を
定義すればコンパイルできます。
ただし、ソース構成の都合上、crypt64.S は手動で行います。
以前私は yasm を用いました。

http://www.tortall.net/projects/yasm/

1) プリプロセッサを通します。私はメンドくさいので GCC に行わせました。

  $ gcc -DUSE_64_XMM -E crypt64.S -o crypt64.asm

2) 中間ファイル crypt64.asm を手で修正します。現時点の yasm は
 gas 完全コンパチではないので、以下の作業を行う必要があるようです。

  -- .if から .endif を手動で切り取る
  -- セミコロン ; はコメント開始として扱われてしまうので、手で改行に置換。

3) アセンブル

  $ yasm  -f win64 -p gas -m amd64 crypt64.asm -o crypt64.obj

以上の作業を行わせる Perl スクリプトの断片を以下に示します。FYI.

open($F1, "gcc -DUSE_64_XMM -E crypt64.S |");
open($F2, "| gcc -E - | ./yasm -f win64 -p gas -m amd64 - -o crypt64.obj -l crypt64.lst");
while (<$F1>)
{
    s/\.if/#if/g;
    s/\.else/#else/g;
    s/\.endif/#endif/g;
    s/;/\n/g;
    print $F2 $_;
}

最近は、 GNU binutils の x86_64-pc-mingw32-as を作って crypt64.obj などをつくっています。
http://www.mingw.org/ を見ても、x64 サポートの日は近そうです。

また、expr_parse.y, expr_scan.lex は、Cygwin に処理させました。

実行ファイルをインストール不要で再配布可能にするためには、ライブラリを
静的リンクする必要があります。Vista x64 付属のランタイム DLL は早くも
古くなってしまったようです。


** Linux など、POSIX 準拠 OS の場合

シンボル USE_64_XMM もしくは USE_64 を定義の上コンパイルしてください。
(てぬき)
Suse 9.0 にてコンパイルおよび動作確認していた時期も、私にはありましたが、
SOURCEFORGE.JP の AMD64 庭がとんでしまったので、ノーチェックです。
ただ、最近でも枝分かれした兄弟のコードを ppc64-linux にて
コンパイルできているので、大きな障壁はなさそうです。



* How to contact me

mailto:chapuni@users.sourceforge.jp


*EOF
