libcoroutine: PowerPC Mac対応
G4 Dualが手に入ったので早速portする。
ucontextの内部構造体にアクセスしてうにゃうにゃな部分がppcだとうまく動かないらしいので、setjmp()による実装にfallbackしといた。
あとgcc拡張の__threadキーワードもppcだとサポートされてないみたいなので、pthread経由で自前でグローバル変数をthread local storageに差し替え。
結構やばげなマクロ:
#ifdef CORO_REQUIRE_GLOBALCB #ifdef USE_PTHREAD #include <pthread.h> static pthread_key_t globalkeyCB; static pthread_once_t globalkeyonce = PTHREAD_ONCE_INIT; #define ACQUIRE_GLOBALCB CallbackBlock* globalpCallbackBlock = (CallbackBlock*) pthread_getspecific(globalkeyCB); #define globalCallbackBlock (*globalpCallbackBlock) #else #define ACQUIRE_GLOBALCB ; static __thread CallbackBlock globalCallbackBlock; #endif #endif