プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

[kernel watch没ネタ集] long nop バトル このエントリーをはてなブックマークに追加

x86には様々なNOPがあり、Intel® 64 and IA-32 Architectures Software Developer’s Manual に記載のあるものだけでも1byte長から9byte長までの種類がある。
これにprefix等の選択肢を考えると、まさに無限に広がる大宇宙。といった感じの可能性の広さである。

で、LKML内ではNOPの種類によって速度が変わることが広く知られていて、時折どのNOPを使うのがよいかが熱い議論になる。
特に近年は自己書き換えコードの都合で最速5byte NOP議論が熱い(long jumpが5byteだからね)。

まあ、5byte NOPと3byte NOP + 2byte NOP(とprefix NOP)のどれが速いか、なんて議論は、自転車置き場理論によって無駄にスレッドがのびていくので見ていて楽しい(ほんとか?)

で、最近話題になったのはlong nopっていつ使ってもいいんだっけ議論。
Intel® 64 and IA-32 Architectures Software Developer’s Manual を読むとP6以降はlong nopが使えると書いてあるが、これま間違い。
VIAのCPUで互換性が不十分なものがあり、あれにのっている判定方法だとうまくいかない。まあ、そんなマイナーCPUは忘れる。という選択肢もあるが。
なお悪いことに、Virtual PC 2007 のCPUエミュレーションがいまいちでlong nopが動かないらしい。

そうするとありとあらゆるCPU種別判定が意味がなくなってしまうのでどうすんべ。と。

で、アホなことに(アレゲ、といってもいい)最初はlong nopでコンパイルしておいて#UD(Undefined Opcode exception. 未定義命令例外)があがってきたら、例外ハンドラのなかで自己書き換えコード走らせてshort nopに変換するというパッチ。
あほすぎる。

なぜキミタチはそこまでNOPにコダワリマスカ?
関連記事


linux | 【2008-10-02(Thu) 21:43:12】 | Trackback:(0) | Comments:(0)
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。