続 Cygwin vs Fiber

とりあえず昨日の戦略でうまくいきました。(9/2追記: バグってました。クラッシュします。)
<hamigaki/coroutine/detail/cygwin/cyg_tls.hpp>
怪しげなキャストでファイバコンテキストの中身にアクセスしている箇所はOSのバージョンによっては動かないかもしれません。これは要調査、と。


実装で問題になったのは、ファイバ側のスタックをどうやって伸ばすかです。
スレッド側から弄ろうと試行錯誤したもののうまくいかなかったので、ファイバ関数の最初にalloca()を呼ぶようにしました。
fiber.hppの差分
coroutine.hppの差分
Cygwin専用の処理を無理やり追加したせいで、コードがごちゃごちゃしています。
一応動いていますが、ファイバ切り替えのたびに12KBもmemcpy()が発生するので、スレッドより遅いかもしれません。
まぁいいや、Cygwinだし。