mirror of
https://git.vladimir.cc/vladimir/libfec.git
synced 2026-08-25 17:27:34 +00:00
init commit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/* Determine CPU support for SIMD on Power PC
|
||||
* Copyright 2004 Phil Karn, KA9Q
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include "fec.h"
|
||||
#ifdef __VEC__
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
|
||||
/* Various SIMD instruction set names */
|
||||
char *Cpu_modes[] = {"Unknown","Portable C","x86 Multi Media Extensions (MMX)",
|
||||
"x86 Streaming SIMD Extensions (SSE)",
|
||||
"x86 Streaming SIMD Extensions 2 (SSE2)",
|
||||
"PowerPC G4/G5 Altivec/Velocity Engine"};
|
||||
|
||||
enum cpu_mode Cpu_mode;
|
||||
|
||||
void find_cpu_mode(void){
|
||||
|
||||
if(Cpu_mode != UNKNOWN)
|
||||
return;
|
||||
|
||||
#ifdef __VEC__
|
||||
{
|
||||
/* Ask the OS if we have Altivec support */
|
||||
int selectors[2] = { CTL_HW, HW_VECTORUNIT };
|
||||
int hasVectorUnit = 0;
|
||||
size_t length = sizeof(hasVectorUnit);
|
||||
int error = sysctl(selectors, 2, &hasVectorUnit, &length, NULL, 0);
|
||||
if(0 == error && hasVectorUnit)
|
||||
Cpu_mode = ALTIVEC;
|
||||
else
|
||||
Cpu_mode = PORT;
|
||||
}
|
||||
#else
|
||||
Cpu_mode = PORT;
|
||||
#endif
|
||||
|
||||
fprintf(stderr,"SIMD CPU detect: %s\n",Cpu_modes[Cpu_mode]);
|
||||
}
|
||||
Reference in New Issue
Block a user