1/* 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}
34