@@ -260,6 +260,11 @@ endif | |||
BINARY_DEFINED = 1 | |||
endif | |||
ifeq ($(CORE), LOONGSON3A) | |||
CCOMMON_OPT += -march=mips64 | |||
FCOMMON_OPT += -march=mips64 | |||
endif | |||
ifeq ($(OSNAME), AIX) | |||
BINARY_DEFINED = 1 | |||
endif | |||
@@ -1,3 +1,36 @@ | |||
/***************************************************************************** | |||
Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS | |||
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. | |||
3. Neither the name of the ISCAS nor the names of its contributors may | |||
be used to endorse or promote products derived from this software | |||
without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER 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. | |||
**********************************************************************************/ | |||
/*********************************************************************/ | |||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||
/* All rights reserved. */ | |||
@@ -36,12 +69,57 @@ | |||
/* or implied, of The University of Texas at Austin. */ | |||
/*********************************************************************/ | |||
#define CPU_UNKNOWN 0 | |||
#define CPU_SICORTEX 1 | |||
#define CPU_LOONGSON3A 2 | |||
static char *cpuname[] = { | |||
"UNKOWN", | |||
"SICORTEX", | |||
"LOONGSON3A" | |||
}; | |||
int detect(void){ | |||
#ifdef linux | |||
FILE *infile; | |||
char buffer[512], *p; | |||
p = (char *)NULL; | |||
infile = fopen("/proc/cpuinfo", "r"); | |||
while (fgets(buffer, sizeof(buffer), infile)){ | |||
if (!strncmp("cpu", buffer, 3)){ | |||
p = strchr(buffer, ':') + 2; | |||
#if 0 | |||
fprintf(stderr, "%s\n", p); | |||
#endif | |||
break; | |||
} | |||
} | |||
fclose(infile); | |||
if (strstr(p, "Loongson-3A")) return CPU_LOONGSON3A; | |||
else return CPU_SICORTEX; | |||
#endif | |||
return CPU_UNKNOWN; | |||
} | |||
char *get_corename(void){ | |||
return cpuname[detect()]; | |||
} | |||
void get_architecture(void){ | |||
printf("MIPS64"); | |||
} | |||
void get_subarchitecture(void){ | |||
printf("SICORTEX"); | |||
if(detect()==CPU_LOONGSON3A) { | |||
printf("LOONGSON3A"); | |||
}else{ | |||
printf("SICORTEX"); | |||
} | |||
} | |||
void get_subdirname(void){ | |||
@@ -49,20 +127,35 @@ void get_subdirname(void){ | |||
} | |||
void get_cpuconfig(void){ | |||
printf("#define SICORTEX\n"); | |||
printf("#define L1_DATA_SIZE 32768\n"); | |||
printf("#define L1_DATA_LINESIZE 32\n"); | |||
printf("#define L2_SIZE 512488\n"); | |||
printf("#define L2_LINESIZE 32\n"); | |||
printf("#define DTB_ENTRIES 32\n"); | |||
printf("#define DTB_SIZE 4096\n"); | |||
printf("#define L2_ASSOCIATIVE 8\n"); | |||
if(detect()==CPU_LOONGSON3A) { | |||
printf("#define LOONGSON3A\n"); | |||
printf("#define L1_DATA_SIZE 65536\n"); | |||
printf("#define L1_DATA_LINESIZE 32\n"); | |||
printf("#define L2_SIZE 512488\n"); | |||
printf("#define L2_LINESIZE 32\n"); | |||
printf("#define DTB_ENTRIES 64\n"); | |||
printf("#define DTB_SIZE 4096\n"); | |||
printf("#define L2_ASSOCIATIVE 4\n"); | |||
}else{ | |||
printf("#define SICORTEX\n"); | |||
printf("#define L1_DATA_SIZE 32768\n"); | |||
printf("#define L1_DATA_LINESIZE 32\n"); | |||
printf("#define L2_SIZE 512488\n"); | |||
printf("#define L2_LINESIZE 32\n"); | |||
printf("#define DTB_ENTRIES 32\n"); | |||
printf("#define DTB_SIZE 4096\n"); | |||
printf("#define L2_ASSOCIATIVE 8\n"); | |||
} | |||
} | |||
void get_libname(void){ | |||
if(detect()==CPU_LOONGSON3A) { | |||
printf("loongson3a\n"); | |||
}else{ | |||
#ifdef __mips64 | |||
printf("mips64\n"); | |||
#else | |||
printf("mips32\n"); | |||
#endif | |||
} | |||
} |
@@ -1,3 +1,35 @@ | |||
/***************************************************************************** | |||
Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS | |||
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. | |||
3. Neither the name of the ISCAS nor the names of its contributors may | |||
be used to endorse or promote products derived from this software | |||
without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER 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. | |||
**********************************************************************************/ | |||
/*********************************************************************/ | |||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||
/* All rights reserved. */ | |||
@@ -84,6 +116,7 @@ | |||
/* #define FORCE_PPC440FP2 */ | |||
/* #define FORCE_CELL */ | |||
/* #define FORCE_SICORTEX */ | |||
/* #define FORCE_LOONSON3A */ | |||
/* #define FORCE_ITANIUM2 */ | |||
/* #define FORCE_GENERIC */ | |||
/* #define FORCE_SPARC */ | |||
@@ -500,6 +533,20 @@ | |||
#define CORENAME "sicortex" | |||
#endif | |||
#ifdef FORCE_LOONGSON3A | |||
#define FORCE | |||
#define ARCHITECTURE "MIPS" | |||
#define SUBARCHITECTURE "LOONGSON3A" | |||
#define SUBDIRNAME "mips64" | |||
#define ARCHCONFIG "-DLOONGSON3A " \ | |||
"-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=32 " \ | |||
"-DL2_SIZE=512488 -DL2_LINESIZE=32 " \ | |||
"-DDTB_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=4 " | |||
#define LIBNAME "loongson3a" | |||
#define CORENAME "LOONGSON3A" | |||
#endif | |||
#ifdef FORCE_ITANIUM2 | |||
#define FORCE | |||
#define ARCHITECTURE "IA64" | |||
@@ -631,7 +678,7 @@ int main(int argc, char *argv[]){ | |||
#ifdef FORCE | |||
printf("CORE=%s\n", CORENAME); | |||
#else | |||
#if defined(__i386__) || defined(__x86_64__) || defined(POWER) | |||
#if defined(__i386__) || defined(__x86_64__) || defined(POWER) || defined(__mips__) | |||
printf("CORE=%s\n", get_corename()); | |||
#endif | |||
#endif | |||
@@ -1,3 +1,35 @@ | |||
/***************************************************************************** | |||
Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS | |||
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. | |||
3. Neither the name of the ISCAS nor the names of its contributors may | |||
be used to endorse or promote products derived from this software | |||
without specific prior written permission. | |||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 COPYRIGHT OWNER 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. | |||
**********************************************************************************/ | |||
/*********************************************************************/ | |||
/* Copyright 2009, 2010 The University of Texas at Austin. */ | |||
/* All rights reserved. */ | |||
@@ -1439,6 +1471,42 @@ | |||
#define SYMV_P 16 | |||
#endif | |||
#ifdef LOONGSON3A | |||
////Copy from SICORTEX | |||
#define SNUMOPT 2 | |||
#define DNUMOPT 2 | |||
#define GEMM_DEFAULT_OFFSET_A 0 | |||
#define GEMM_DEFAULT_OFFSET_B 0 | |||
#define GEMM_DEFAULT_ALIGN 0x03fffUL | |||
#define SGEMM_DEFAULT_UNROLL_M 2 | |||
#define SGEMM_DEFAULT_UNROLL_N 8 | |||
#define DGEMM_DEFAULT_UNROLL_M 2 | |||
#define DGEMM_DEFAULT_UNROLL_N 8 | |||
#define CGEMM_DEFAULT_UNROLL_M 1 | |||
#define CGEMM_DEFAULT_UNROLL_N 4 | |||
#define ZGEMM_DEFAULT_UNROLL_M 1 | |||
#define ZGEMM_DEFAULT_UNROLL_N 4 | |||
#define SGEMM_DEFAULT_P 108 | |||
#define DGEMM_DEFAULT_P 112 | |||
#define CGEMM_DEFAULT_P 108 | |||
#define ZGEMM_DEFAULT_P 112 | |||
#define SGEMM_DEFAULT_Q 288 | |||
#define DGEMM_DEFAULT_Q 144 | |||
#define CGEMM_DEFAULT_Q 144 | |||
#define ZGEMM_DEFAULT_Q 72 | |||
#define SGEMM_DEFAULT_R 2000 | |||
#define DGEMM_DEFAULT_R 2000 | |||
#define CGEMM_DEFAULT_R 2000 | |||
#define ZGEMM_DEFAULT_R 2000 | |||
#define SYMV_P 16 | |||
#endif | |||
#ifdef GENERIC | |||
#define SNUMOPT 2 | |||