Mercurial > vec
comparison src/cpu.c @ 34:8b5e0974fd41
Backed out changeset 92156fe32755
| author | Paper <paper@tflc.us> |
|---|---|
| date | Fri, 25 Apr 2025 17:40:46 -0400 |
| parents | bf6ad516f1e6 |
| children |
comparison
equal
deleted
inserted
replaced
| 33:4655b49eaf9f | 34:8b5e0974fd41 |
|---|---|
| 42 * 2. Altered source versions must be plainly marked as such, and must not be | 42 * 2. Altered source versions must be plainly marked as such, and must not be |
| 43 * misrepresented as being the original software. | 43 * misrepresented as being the original software. |
| 44 * 3. This notice may not be removed or altered from any source distribution. | 44 * 3. This notice may not be removed or altered from any source distribution. |
| 45 */ | 45 */ |
| 46 | 46 |
| 47 #include "vec/vec.h" | |
| 48 #include "vec/cpu.h" | 47 #include "vec/cpu.h" |
| 49 | 48 |
| 50 #if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__)) | 49 #if defined(__MACOSX__) && (defined(__ppc__) || defined(__ppc64__)) |
| 51 # include <sys/sysctl.h> // For AltiVec check | 50 # include <sys/sysctl.h> // For AltiVec check |
| 52 #elif defined(__OpenBSD__) && defined(__powerpc__) | 51 #elif defined(__OpenBSD__) && defined(__powerpc__) |
| 54 # include <sys/sysctl.h> // For AltiVec check | 53 # include <sys/sysctl.h> // For AltiVec check |
| 55 # include <machine/cpu.h> | 54 # include <machine/cpu.h> |
| 56 #elif defined(__FreeBSD__) && defined(__powerpc__) | 55 #elif defined(__FreeBSD__) && defined(__powerpc__) |
| 57 # include <machine/cpu.h> | 56 # include <machine/cpu.h> |
| 58 # include <sys/auxv.h> | 57 # include <sys/auxv.h> |
| 59 #elif defined(VEC_COMPILER_HAS_ALTIVEC) | 58 #elif defined(__ALTIVEC__) |
| 60 # include <signal.h> | 59 # include <signal.h> |
| 61 # include <setjmp.h> | 60 # include <setjmp.h> |
| 62 #endif | 61 #endif |
| 63 | 62 |
| 64 #ifdef __FreeBSD__ | 63 #ifdef __FreeBSD__ |
| 309 altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC; | 308 altivec = cpufeatures & PPC_FEATURE_HAS_ALTIVEC; |
| 310 #elif defined(VEC_COMPILER_HAS_ALTIVEC) && defined(__GNUC__) | 309 #elif defined(VEC_COMPILER_HAS_ALTIVEC) && defined(__GNUC__) |
| 311 void (*handler)(int sig); | 310 void (*handler)(int sig); |
| 312 handler = signal(SIGILL, vec_CPU_illegal_instruction); | 311 handler = signal(SIGILL, vec_CPU_illegal_instruction); |
| 313 if (!setjmp(vec_jmpbuf)) { | 312 if (!setjmp(vec_jmpbuf)) { |
| 314 __asm__ __volatile__("mtspr 256, %0\n\t" | 313 vector unsigned char vec; |
| 315 "vand %%v0, %%v0, %%v0" ::"r"(-1)); | 314 vec_and(vec, vec); |
| 316 altivec = 1; | 315 altivec = 1; |
| 317 } | 316 } |
| 318 signal(SIGILL, handler); | 317 signal(SIGILL, handler); |
| 319 #endif | 318 #endif |
| 320 return altivec; | 319 return altivec; |
