ASIO4ALL on x64

Windows 7 (x64) にASIO4ALL (x64)をインストールしたのですが、IASIO::setSampleRate()が必ず失敗します。
IASIO::setSampleRate()しなければ動くようで、どうもdouble引数の受け渡しがうまくいっていない模様。
Winampのout_asio(x64).dllも動かないので自分のコードの間違いではなさそうです。
また、32ビットなら動きます。

typedef long ASIOError;
typedef double ASIOSampleRate;

struct IASIO : public IUnknown
{
    // ...
    virtual ASIOError setSampleRate(ASIOSampleRate sampleRate) = 0;
    // ...
};

COMなのに__stdcall使ってないのでx86ではVC++以外のコンパイラで困りましたが、
x64では呼び出し規約が一つ*1なので問題ありません。
x64呼び出し規約では、thisポインタがRCX、sampleRateがxmm1で渡されるはずです。
ところがデバッガで追っていくとxmm1は一切参照せず、代わりにxmm0を見ているようでした。
試しにバイナリエディタでxmm0→xmm1に書き換えて試したところ動いてしまいました。(Winampでも!)
一応パッチ内容を貼っておきます。

asio4all64.dll (MD5: 3e27e83063cd64a25f914e7ef556112c)
0x000056CD: C0 -> C1
0x000057CF: C0 -> C1

うーむ、こんな対応でいいんでしょうか、、、。

*1:gccは使うレジスタが違う模様