diff options
Diffstat (limited to 'getarch.c')
-rw-r--r-- | getarch.c | 732 |
1 files changed, 732 insertions, 0 deletions
diff --git a/getarch.c b/getarch.c new file mode 100644 index 000000000..347dbb1de --- /dev/null +++ b/getarch.c @@ -0,0 +1,732 @@ +/*********************************************************************/ +/* Copyright 2009, 2010 The University of Texas at Austin. */ +/* All rights reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or */ +/* without modification, are permitted provided that the following */ +/* conditions are met: */ +/* */ +/* 1. Redistributions of source code must retain the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer. */ +/* */ +/* 2. Redistributions in binary form must reproduce the above */ +/* copyright notice, this list of conditions and the following */ +/* disclaimer in the documentation and/or other materials */ +/* provided with the distribution. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF TEXAS AT */ +/* AUSTIN ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, */ +/* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF */ +/* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT */ +/* AUSTIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, */ +/* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */ +/* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE */ +/* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR */ +/* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */ +/* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ +/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT */ +/* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE */ +/* POSSIBILITY OF SUCH DAMAGE. */ +/* */ +/* The views and conclusions contained in the software and */ +/* documentation are those of the authors and should not be */ +/* interpreted as representing official policies, either expressed */ +/* or implied, of The University of Texas at Austin. */ +/*********************************************************************/ + +#if defined(__WIN32__) || defined(__WIN64__) || defined(__CYGWIN32__) || defined(__CYGWIN64__) +#define OS_WINDOWS +#endif + +#include <stdio.h> +#include <string.h> +#ifdef OS_WINDOWS +#include <windows.h> +#endif +#if defined(__FreeBSD__) || defined(__APPLE__) +#include <sys/types.h> +#include <sys/sysctl.h> +#endif +#ifdef linux +#include <sys/sysinfo.h> +#endif + +/* #define FORCE_P2 */ +/* #define FORCE_KATMAI */ +/* #define FORCE_COPPERMINE */ +/* #define FORCE_NORTHWOOD */ +/* #define FORCE_PRESCOTT */ +/* #define FORCE_BANIAS */ +/* #define FORCE_YONAH */ +/* #define FORCE_CORE2 */ +/* #define FORCE_PENRYN */ +/* #define FORCE_DUNNINGTON */ +/* #define FORCE_NEHALEM */ +/* #define FORCE_ATHLON */ +/* #define FORCE_OPTERON */ +/* #define FORCE_OPTERON_SSE3 */ +/* #define FORCE_BARCELONA */ +/* #define FORCE_SHANGHAI */ +/* #define FORCE_ISTANBUL */ +/* #define FORCE_SSE_GENERIC */ +/* #define FORCE_VIAC3 */ +/* #define FORCE_NANO */ +/* #define FORCE_POWER3 */ +/* #define FORCE_POWER4 */ +/* #define FORCE_POWER5 */ +/* #define FORCE_POWER6 */ +/* #define FORCE_PPCG4 */ +/* #define FORCE_PPC970 */ +/* #define FORCE_PPC970MP */ +/* #define FORCE_PPC440 */ +/* #define FORCE_PPC440FP2 */ +/* #define FORCE_CELL */ +/* #define FORCE_SICORTEX */ +/* #define FORCE_ITANIUM2 */ +/* #define FORCE_GENERIC */ +/* #define FORCE_SPARC */ +/* #define FORCE_SPARCV7 */ + +#ifdef FORCE_P2 +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "PENTIUM2" +#define ARCHCONFIG "-DPENTIUM2 " \ + "-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=512488 -DL2_LINESIZE=32 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX" +#define LIBNAME "p2" +#define CORENAME "P5" +#endif + +#ifdef FORCE_COPPERMINE +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "PENTIUM3" +#define ARCHCONFIG "-DPENTIUM3 " \ + "-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=262144 -DL2_LINESIZE=32 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE " +#define LIBNAME "coppermine" +#define CORENAME "COPPERMINE" +#endif + +#ifdef FORCE_KATMAI +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "PENTIUM3" +#define ARCHCONFIG "-DPENTIUM3 " \ + "-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=524288 -DL2_LINESIZE=32 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE " +#define LIBNAME "katmai" +#define CORENAME "KATMAI" +#endif + +#ifdef FORCE_NORTHWOOD +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "PENTIUM4" +#define ARCHCONFIG "-DPENTIUM4 " \ + "-DL1_DATA_SIZE=8192 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=524288 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 " +#define LIBNAME "northwood" +#define CORENAME "NORTHWOOD" +#endif + +#ifdef FORCE_PRESCOTT +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "PENTIUM4" +#define ARCHCONFIG "-DPENTIUM4 " \ + "-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3" +#define LIBNAME "prescott" +#define CORENAME "PRESCOTT" +#endif + +#ifdef FORCE_BANIAS +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "BANIAS" +#define ARCHCONFIG "-DPENTIUMM " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 " +#define LIBNAME "banias" +#define CORENAME "BANIAS" +#endif + +#ifdef FORCE_YONAH +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "YONAH" +#define ARCHCONFIG "-DPENTIUMM " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 " +#define LIBNAME "yonah" +#define CORENAME "YONAH" +#endif + +#ifdef FORCE_CORE2 +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "CONRORE" +#define ARCHCONFIG "-DCORE2 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=256 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3" +#define LIBNAME "core2" +#define CORENAME "CORE2" +#endif + +#ifdef FORCE_PENRYN +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "PENRYN" +#define ARCHCONFIG "-DPENRYN " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=256 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3 -DHAVE_SSE4_1" +#define LIBNAME "penryn" +#define CORENAME "PENRYN" +#endif + +#ifdef FORCE_DUNNINGTON +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "DUNNINGTON" +#define ARCHCONFIG "-DDUNNINGTON " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DL3_SIZE=16777216 -DL3_LINESIZE=64 " \ + "-DDTB_ENTRIES=256 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3 -DHAVE_SSE4_1" +#define LIBNAME "dunnington" +#define CORENAME "DUNNINGTON" +#endif + +#ifdef FORCE_NEHALEM +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "NEHALEM" +#define ARCHCONFIG "-DNEHALEM " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=262144 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3 -DHAVE_SSE4_1 -DHAVE_SSE4_2" +#define LIBNAME "nehalem" +#define CORENAME "NEHALEM" +#endif + +#ifdef FORCE_ATOM +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "ATOM" +#define ARCHCONFIG "-DATOM " \ + "-DL1_DATA_SIZE=24576 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=524288 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3" +#define LIBNAME "atom" +#define CORENAME "ATOM" +#endif + +#ifdef FORCE_ATHLON +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "ATHLON" +#define ARCHCONFIG "-DATHLON " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=32 -DDTB_SIZE=4096 -DHAVE_3DNOW " \ + "-DHAVE_3DNOWEX -DHAVE_MMX -DHAVE_SSE " +#define LIBNAME "athlon" +#define CORENAME "ATHLON" +#endif + +#ifdef FORCE_OPTERON +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "OPTERON" +#define ARCHCONFIG "-DOPTERON " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=32 -DDTB_SIZE=4096 -DHAVE_3DNOW " \ + "-DHAVE_3DNOWEX -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 " +#define LIBNAME "opteron" +#define CORENAME "OPTERON" +#endif + +#ifdef FORCE_OPTERON_SSE3 +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "OPTERON" +#define ARCHCONFIG "-DOPTERON " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=32 -DDTB_SIZE=4096 -DHAVE_3DNOW " \ + "-DHAVE_3DNOWEX -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3" +#define LIBNAME "opteron" +#define CORENAME "OPTERON" +#endif + +#if defined(FORCE_BARCELONA) || defined(FORCE_SHANGHAI) || defined(FORCE_ISTANBUL) +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "BARCELONA" +#define ARCHCONFIG "-DBARCELONA " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=524288 -DL2_LINESIZE=64 -DL3_SIZE=2097152 " \ + "-DDTB_ENTRIES=48 -DDTB_SIZE=4096 -DHAVE_3DNOW " \ + "-DHAVE_3DNOWEX -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 " \ + "-DHAVE_SSE4A -DHAVE_MISALIGNSSE -DHAVE_128BITFPU -DHAVE_FASTMOVU" +#define LIBNAME "barcelona" +#define CORENAME "BARCELONA" +#endif + +#ifdef FORCE_SSE_GENERIC +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "GENERIC" +#define ARCHCONFIG "-DGENERIC " \ + "-DL1_DATA_SIZE=16384 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=524288 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2" +#define LIBNAME "generic" +#define CORENAME "GENERIC" +#endif + +#ifdef FORCE_VIAC3 +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "VIAC3" +#define ARCHCONFIG "-DVIAC3 " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=65536 -DL2_LINESIZE=32 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 " \ + "-DHAVE_MMX -DHAVE_SSE " +#define LIBNAME "viac3" +#define CORENAME "VIAC3" +#endif + +#ifdef FORCE_NANO +#define FORCE +#define FORCE_INTEL +#define ARCHITECTURE "X86" +#define SUBARCHITECTURE "NANO" +#define ARCHCONFIG "-DNANO " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1048576 -DL2_LINESIZE=64 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " \ + "-DHAVE_CMOV -DHAVE_MMX -DHAVE_SSE -DHAVE_SSE2 -DHAVE_SSE3 -DHAVE_SSSE3" +#define LIBNAME "nano" +#define CORENAME "NANO" +#endif + +#ifdef FORCE_POWER3 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "POWER3" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPOWER3 " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=2097152 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=256 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "power3" +#define CORENAME "POWER3" +#endif + +#ifdef FORCE_POWER4 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "POWER4" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPOWER4 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=1509949 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=6 " +#define LIBNAME "power4" +#define CORENAME "POWER4" +#endif + +#ifdef FORCE_POWER5 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "POWER5" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPOWER5 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=1509949 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=6 " +#define LIBNAME "power5" +#define CORENAME "POWER5" +#endif + +#ifdef FORCE_POWER6 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "POWER6" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPOWER6 " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=4194304 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "power6" +#define CORENAME "POWER6" +#endif + +#ifdef FORCE_PPCG4 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "PPCG4" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPPCG4 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=262144 -DL2_LINESIZE=32 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "ppcg4" +#define CORENAME "PPCG4" +#endif + +#ifdef FORCE_PPC970 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "PPC970" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPPC970 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=512488 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "ppc970" +#define CORENAME "PPC970" +#endif + +#ifdef FORCE_PPC970MP +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "PPC970" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPPC970 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=1024976 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "ppc970mp" +#define CORENAME "PPC970" +#endif + +#ifdef FORCE_PPC440 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "PPC440" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPPC440 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=16384 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=16 " +#define LIBNAME "ppc440" +#define CORENAME "PPC440" +#endif + +#ifdef FORCE_PPC440FP2 +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "PPC440FP2" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DPPC440FP2 " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=16384 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=16 " +#define LIBNAME "ppc440FP2" +#define CORENAME "PPC440FP2" +#endif + +#ifdef FORCE_CELL +#define FORCE +#define ARCHITECTURE "POWER" +#define SUBARCHITECTURE "CELL" +#define SUBDIRNAME "power" +#define ARCHCONFIG "-DCELL " \ + "-DL1_DATA_SIZE=262144 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=512488 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "cell" +#define CORENAME "CELL" +#endif + +#ifdef FORCE_SICORTEX +#define FORCE +#define ARCHITECTURE "MIPS" +#define SUBARCHITECTURE "SICORTEX" +#define SUBDIRNAME "mips" +#define ARCHCONFIG "-DSICORTEX " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=32 " \ + "-DL2_SIZE=512488 -DL2_LINESIZE=32 " \ + "-DDTB_ENTRIES=32 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "mips" +#define CORENAME "sicortex" +#endif + +#ifdef FORCE_ITANIUM2 +#define FORCE +#define ARCHITECTURE "IA64" +#define SUBARCHITECTURE "ITANIUM2" +#define SUBDIRNAME "ia64" +#define ARCHCONFIG "-DITANIUM2 " \ + "-DL1_DATA_SIZE=262144 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=1572864 -DL2_LINESIZE=128 -DDTB_SIZE=16384 -DDTB_ENTRIES=128 " +#define LIBNAME "itanium2" +#define CORENAME "itanium2" +#endif + +#ifdef FORCE_SPARC +#define FORCE +#define ARCHITECTURE "SPARC" +#define SUBARCHITECTURE "SPARC" +#define SUBDIRNAME "sparc" +#define ARCHCONFIG "-DSPARC -DV9 " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1572864 -DL2_LINESIZE=64 -DDTB_SIZE=8192 -DDTB_ENTRIES=64 " +#define LIBNAME "sparc" +#define CORENAME "sparc" +#endif + +#ifdef FORCE_SPARCV7 +#define FORCE +#define ARCHITECTURE "SPARC" +#define SUBARCHITECTURE "SPARC" +#define SUBDIRNAME "sparc" +#define ARCHCONFIG "-DSPARC -DV7 " \ + "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=64 " \ + "-DL2_SIZE=1572864 -DL2_LINESIZE=64 -DDTB_SIZE=8192 -DDTB_ENTRIES=64 " +#define LIBNAME "sparcv7" +#define CORENAME "sparcv7" +#endif + +#ifdef FORCE_GENERIC +#define FORCE +#define ARCHITECTURE "GENERIC" +#define SUBARCHITECTURE "GENERIC" +#define SUBDIRNAME "generic" +#define ARCHCONFIG "-DGENERIC " \ + "-DL1_DATA_SIZE=32768 -DL1_DATA_LINESIZE=128 " \ + "-DL2_SIZE=512488 -DL2_LINESIZE=128 " \ + "-DDTB_ENTRIES=128 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " +#define LIBNAME "generic" +#define CORENAME "generic" +#endif + +#ifndef FORCE + +#if defined(__powerpc__) || defined(__powerpc) || defined(powerpc) || \ + defined(__PPC__) || defined(PPC) || defined(_POWER) || defined(__POWERPC__) +#ifndef POWER +#define POWER +#endif +#endif + +#if defined(__i386__) || (__x86_64__) +#include "cpuid_x86.c" +#endif + +#ifdef __ia64__ +#include "cpuid_ia64.c" +#endif + +#ifdef __alpha +#include "cpuid_alpha.c" +#endif + +#ifdef POWER +#include "cpuid_power.c" +#endif + +#ifdef sparc +#include "cpuid_sparc.c" +#endif + +#ifdef __mips__ +#include "cpuid_mips.c" +#endif + +#else + +#endif + +static int get_num_cores(void) { + +#ifdef OS_WINDOWS + SYSTEM_INFO sysinfo; +#elif defined(__FreeBSD__) || defined(__APPLE__) + int m[2], count; + size_t len; +#endif + +#ifdef linux + return get_nprocs(); + +#elif defined(OS_WINDOWS) + + GetSystemInfo(&sysinfo); + return sysinfo.dwNumberOfProcessors; + +#elif defined(__FreeBSD__) || defined(__APPLE__) + m[0] = CTL_HW; + m[1] = HW_NCPU; + len = sizeof(int); + sysctl(m, 2, &count, &len, NULL, 0); + + return count; +#else + return 2; +#endif +} + +int main(int argc, char *argv[]){ + +#ifdef FORCE + char buffer[8192], *p, *q; + int length; +#endif + + if (argc == 1) return 0; + + switch (argv[1][0]) { + + case '0' : /* for Makefile */ + +#ifdef FORCE + printf("CORE=%s\n", CORENAME); +#else +#if defined(__i386__) || defined(__x86_64__) || defined(POWER) + printf("CORE=%s\n", get_corename()); +#endif +#endif + +#ifdef FORCE + printf("LIBCORE=%s\n", LIBNAME); +#else + printf("LIBCORE="); + get_libname(); + printf("\n"); +#endif + + printf("NUM_CORES=%d\n", get_num_cores()); + +#if defined(__i386__) || defined(__x86_64__) +#ifndef FORCE + get_sse(); +#else + + sprintf(buffer, "%s", ARCHCONFIG); + + p = &buffer[0]; + + while (*p) { + if ((*p == '-') && (*(p + 1) == 'D')) { + p += 2; + + while ((*p != ' ') && (*p != '\0')) { + + if (*p == '=') { + printf("="); + p ++; + while ((*p != ' ') && (*p != '\0')) { + printf("%c", *p); + p ++; + } + } else { + printf("%c", *p); + p ++; + if ((*p == ' ') || (*p =='\0')) printf("=1"); + } + } + + printf("\n"); + } else p ++; + } +#endif +#endif + +#ifndef OS_WINDOWS + printf("MAKE += -j %d\n", get_num_cores()); +#endif + + break; + + case '1' : /* For config.h */ +#ifdef FORCE + sprintf(buffer, "%s -DCORE_%s\n", ARCHCONFIG, CORENAME); + + p = &buffer[0]; + while (*p) { + if ((*p == '-') && (*(p + 1) == 'D')) { + p += 2; + printf("#define "); + + while ((*p != ' ') && (*p != '\0')) { + + if (*p == '=') { + printf(" "); + p ++; + while ((*p != ' ') && (*p != '\0')) { + printf("%c", *p); + p ++; + } + } else { + printf("%c", *p); + p ++; + } + } + + printf("\n"); + } else p ++; + } +#else + get_cpuconfig(); +#endif + break; + + case '2' : /* SMP */ + if (get_num_cores() > 1) printf("SMP=1\n"); + break; + } + + fflush(stdout); + + return 0; +} + |