#include <setjmp.h>
#include <signal.h>
#include "cpu_x86.h"
cpu.cのインクルード依存関係図
関数 | |
static void | SSE_not_support (int sig) |
int | haveUNITa (void) |
void | setPIII_round (void) |
int | haveX86_UNIT (void) |
変数 | |
static jmp_buf | jmpPtr |
|
参照元 haveX86_UNIT(). |
|
参照先 haveUNITa(), jmpPtr, MU_tSSE, MU_tSSE2, setPIII_round(), と SSE_not_support(). 参照元 dkcAllocMTRand32(). 00025 { 00026 static int unit = -1; 00027 00028 if (unit != -1) return unit; 00029 unit = haveUNITa(); 00030 00031 #if defined(WIN32) && defined(HAVE___TRY) && defined(HAVE_EXCEPTION_EXECUTE_HANDLER) 00032 if (unit & MU_tSSE) { 00033 __try { 00034 setPIII_round(); 00035 } 00036 __except(EXCEPTION_EXECUTE_HANDLER) { 00037 unit &= ~(MU_tSSE|MU_tSSE2); 00038 } 00039 } 00040 #elif defined(__unix__) || defined(WIN32) || defined(__os2__) || defined(__dos__) 00041 if (unit & MU_tSSE) { 00042 int ret; 00043 ret = setjmp(jmpPtr); 00044 if (!ret) { 00045 signal(SIGILL, SSE_not_support); 00046 setPIII_round(); 00047 signal(SIGILL, SIG_DFL); 00048 }else{ 00049 unit &= ~(MU_tSSE|MU_tSSE2); 00050 } 00051 } 00052 #else 00053 if(unit & MU_tSSE) setPIII_round(); 00054 #endif 00055 00056 return unit; 00057 }
|
|
参照元 haveX86_UNIT(). |
|
参照先 jmpPtr. 参照元 haveX86_UNIT(). 00016 { 00017 signal(SIGILL, SIG_DFL); 00018 longjmp(jmpPtr, 1); 00019 }
|
|
参照元 haveX86_UNIT(), と SSE_not_support(). |