Avisynthを絶讃ιょぅょ Part31

このエントリーをはてなブックマークに追加
109名無しさん@編集中
斧にある64bit版プラグインって、intrinsicに書き直してビルドしてる?
110名無しさん@編集中:2013/12/02(月) 19:16:05.15 ID:pfa85m8I
>>109
使ってるのはIntelのコンパイラだからインラインアセンブラに手を加えてる。
詳しくはソースも一緒だからそっち見てもらうとして、

#if !defined(_WIN64)
rax eax
rsi esi
#else
rax rax
rsi rsi
#endif

mov eax, offset
mov rsi, src_ptr
movdqu xmm0, [rsi+rax]

という感じで書き換えてる。
マクロにしてるのはなるべく32bitと共用化するためと、Visual Studioでは色が変わって見やすいから。
正規表現のパターン置換で、e([abcd]x|si|di|bp)をr\1(VSではr$1)にコードの流れを見ながら順次処理すると楽。
ICLだとかなり効率的に64bit化できる(手こずってるのもあるけど)ので、
この方法はAviutilの64bit化にもつかえそうだなぁ。
111名無しさん@編集中:2013/12/02(月) 19:51:40.84 ID:pfa85m8I
あと、64bitレジスタと32bitのメモリオペランドの演算ができないので、32bitでは使われていない
r8(r8d)〜r15を使って(この部分は#ifで場合分け。64bitでは32bitのpush、popが使えないのでこれも)

add rsi, pitch

mov r8d, pitch

add rsi, r8

他には、__declspec(naked)使ってる関数は__declspec()とret削除しないといけないとか、
レジスタ置換マクロ入れ忘れててもコンパイルエラーにならないとかハマる部分に注意。