pthreads と __m128 SSE タイプを使用するアプリケーションを構築しようとしています。GCC マニュアルによると、デフォルトのスタック アラインメントは 16 バイトです。__m128 を使用するには、16 バイトのアラインメントが必要です。
私のターゲット CPU は SSE をサポートしています。ランタイム スタックの再配置をサポートしていない GCC コンパイラを使用しています (例: -mstackrealign)。他の GCC コンパイラ バージョンは使用できません。
私のテストアプリケーションは次のようになります:
#include <xmmintrin.h>
#include <pthread.h>
void *f(void *x){
__m128 y;
...
}
int main(void){
pthread_t p;
pthread_create(&p, NULL, f, NULL);
}
アプリケーションは例外を生成して終了します。簡単なデバッグ (printf "%p", &y) の後、変数 y が 16 バイトでアラインされていないことがわかりました。
私の質問は、GCC フラグと属性を使用せずに (役に立たない) スタックを適切に (16 バイト) 再調整するにはどうすればよいですか? このスレッド関数 f() 内で GCC インライン アセンブラーを使用する必要がありますか?