IA32

stdcall_thunk

昨日のクラス名が長すぎる問題ですが、早速 direct_sound_buffer → direct_sound_sink direct_sound_capture_buffer → direct_sound_source に変更しました。 これで、vc8ideディレクトリ配下以外は、inspectに引っかからなくなりました。 vc8ideディレクト…

続 vorbisencとbcc32

どうもalloca()前後のコードがおかしい感じです。 ↓C++BuilderのCPUウィンドウからのコピペです。 mapping0.c.614: sortindex[i]=alloca(sizeof(**sortindex)*n/2); 00430A26 6A00 push $00 00430A28 8B55C8 mov edx,[ebp-$38] 00430A2B C1E202 shl edx,$02 …

関数ポインタのキャスト

今日はcdecl_thunkをg++に移植したときに詰まった関数ポインタのキャストについて。 cdecl_thunkでは、関数ポインタとオブジェクトポインタ(void*)の相互変換が必要になります。 VC++だと、この変換はreinterpret_castで出来るのですが、規格上は許可されて…

続cygwinでASIO

IASIOのメンバ呼び出しをインラインアセンブラで書き直しました。もう全然C++じゃないです。 inline ::ASIOBool asio_init(::IASIO* this_ptr, void *sys_handle) { ::ASIOBool result; __asm__ ( "mov %2, %%eax\n\t" "push %%eax\n\t" "mov %1, %%ecx\n\t"…

続cdecl_thunk

昨日のcdecl_thunkを使うと、ASIOのコールバック関数は次のようになります。 struct asio_callbacks { cdecl_thunk<2> buffer_switch; cdecl_thunk<2> sample_rate_changed; cdecl_thunk<4> asio_message; cdecl_thunk<3> buffer_switch_time_info; };sample…

cdecl_thunk

asio_sinkを作成中。 ASIOのコールバック関数にコンテキストを渡せないので、仕方なくサンクを書く羽目になりました。 Windowsで一般的な__stdcall呼び出し規約でなく、__cdecl呼び出し規約なので実装が少々面倒です。 アセンブリ言語は得意でないので、コン…