| 1 |
まあ、待て屋。(64ビット版) |
| 2 |
Thu 23 Aug 2007 |
| 3 |
|
| 4 |
|
| 5 |
* パフォーマンスに関するメモ |
| 6 |
|
| 7 |
AMD64 では、ALU 版の方が速いです。 |
| 8 |
Core2 マイクロアーキテクチャでは、やはり XMM 版の方が速いです。 |
| 9 |
|
| 10 |
|
| 11 |
|
| 12 |
* いじりかた |
| 13 |
|
| 14 |
** Windows の場合 |
| 15 |
|
| 16 |
現時点では64ビットアプリ作成環境が限られています。 |
| 17 |
そのうち非 MSFT 環境でビルドできるようになるといいなと希望を持ってます。 |
| 18 |
私は Visual Studio 8 を使ってみました。 |
| 19 |
参考までに、200509版は、MSFT 配布の VC Toolkit 2003 を利用していました。 |
| 20 |
|
| 21 |
プリプロセッサシンボル USE_64_XMM(SSE2版) もしくは USE_64 (ALU版) を |
| 22 |
定義すればコンパイルできます。 |
| 23 |
ただし、ソース構成の都合上、crypt64.S は手動で行います。 |
| 24 |
以前私は yasm を用いました。 |
| 25 |
|
| 26 |
http://www.tortall.net/projects/yasm/ |
| 27 |
|
| 28 |
1) プリプロセッサを通します。私はメンドくさいので GCC に行わせました。 |
| 29 |
|
| 30 |
$ gcc -DUSE_64_XMM -E crypt64.S -o crypt64.asm |
| 31 |
|
| 32 |
2) 中間ファイル crypt64.asm を手で修正します。現時点の yasm は |
| 33 |
gas 完全コンパチではないので、以下の作業を行う必要があるようです。 |
| 34 |
|
| 35 |
-- .if から .endif を手動で切り取る |
| 36 |
-- セミコロン ; はコメント開始として扱われてしまうので、手で改行に置換。 |
| 37 |
|
| 38 |
3) アセンブル |
| 39 |
|
| 40 |
$ yasm -f win64 -p gas -m amd64 crypt64.asm -o crypt64.obj |
| 41 |
|
| 42 |
以上の作業を行わせる Perl スクリプトの断片を以下に示します。FYI. |
| 43 |
|
| 44 |
open($F1, "gcc -DUSE_64_XMM -E crypt64.S |"); |
| 45 |
open($F2, "| gcc -E - | ./yasm -f win64 -p gas -m amd64 - -o crypt64.obj -l crypt64.lst"); |
| 46 |
while (<$F1>) |
| 47 |
{ |
| 48 |
s/\.if/#if/g; |
| 49 |
s/\.else/#else/g; |
| 50 |
s/\.endif/#endif/g; |
| 51 |
s/;/\n/g; |
| 52 |
print $F2 $_; |
| 53 |
} |
| 54 |
|
| 55 |
最近は、 GNU binutils の x86_64-pc-mingw32-as を作って crypt64.obj などをつくっています。 |
| 56 |
http://www.mingw.org/ を見ても、x64 サポートの日は近そうです。 |
| 57 |
|
| 58 |
また、expr_parse.y, expr_scan.lex は、Cygwin に処理させました。 |
| 59 |
|
| 60 |
実行ファイルをインストール不要で再配布可能にするためには、ライブラリを |
| 61 |
静的リンクする必要があります。Vista x64 付属のランタイム DLL は早くも |
| 62 |
古くなってしまったようです。 |
| 63 |
|
| 64 |
|
| 65 |
** Linux など、POSIX 準拠 OS の場合 |
| 66 |
|
| 67 |
シンボル USE_64_XMM もしくは USE_64 を定義の上コンパイルしてください。 |
| 68 |
(てぬき) |
| 69 |
Suse 9.0 にてコンパイルおよび動作確認していた時期も、私にはありましたが、 |
| 70 |
SOURCEFORGE.JP の AMD64 庭がとんでしまったので、ノーチェックです。 |
| 71 |
ただ、最近でも枝分かれした兄弟のコードを ppc64-linux にて |
| 72 |
コンパイルできているので、大きな障壁はなさそうです。 |
| 73 |
|
| 74 |
|
| 75 |
|
| 76 |
* How to contact me |
| 77 |
|
| 78 |
mailto:chapuni@users.sourceforge.jp |
| 79 |
|
| 80 |
|
| 81 |
*EOF |