blob: 322018ebf937af662f36fa03dff84c0b7f46bd29 [file] [log] [blame]
Bill Yi4e213d52015-06-23 13:53:11 -07001/* Determine CPU support for SIMD
2 * Copyright 2004 Phil Karn, KA9Q
3 */
4#include <stdio.h>
5#include "fec.h"
6
7/* Various SIMD instruction set names */
8char *Cpu_modes[] = {"Unknown","Portable C","x86 Multi Media Extensions (MMX)",
9 "x86 Streaming SIMD Extensions (SSE)",
10 "x86 Streaming SIMD Extensions 2 (SSE2)",
11 "PowerPC G4/G5 Altivec/Velocity Engine"};
12
13enum cpu_mode Cpu_mode;
14
15void find_cpu_mode(void){
16
17 int f;
18 if(Cpu_mode != UNKNOWN)
19 return;
20
21 /* Figure out what kind of CPU we have */
22 f = cpu_features();
23 if(f & (1<<26)){ /* SSE2 is present */
24 Cpu_mode = SSE2;
25 } else if(f & (1<<25)){ /* SSE is present */
26 Cpu_mode = SSE;
27 } else if(f & (1<<23)){ /* MMX is present */
28 Cpu_mode = MMX;
29 } else { /* No SIMD at all */
30 Cpu_mode = PORT;
31 }
32 fprintf(stderr,"SIMD CPU detect: %s\n",Cpu_modes[Cpu_mode]);
33}