Make it work on general MIPS64 processorstags/v0.3.22^2
| @@ -677,7 +677,12 @@ endif | |||||
| endif | endif | ||||
| ifeq ($(ARCH), mips64) | ifeq ($(ARCH), mips64) | ||||
| DYNAMIC_CORE = LOONGSON3R3 LOONGSON3R4 | |||||
| DYNAMIC_CORE = LOONGSON3R3 LOONGSON3R4 MIPS64_GENERIC | |||||
| ifdef DYNAMIC_LIST | |||||
| override DYNAMIC_CORE = MIPS64_GENERIC $(DYNAMIC_LIST) | |||||
| XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_MIPS64_GENERIC | |||||
| XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore)) | |||||
| endif | |||||
| endif | endif | ||||
| ifeq ($(ARCH), loongarch64) | ifeq ($(ARCH), loongarch64) | ||||
| @@ -856,6 +861,11 @@ CCOMMON_OPT += -mabi=32 | |||||
| BINARY_DEFINED = 1 | BINARY_DEFINED = 1 | ||||
| endif | endif | ||||
| ifneq (, $(filter $(CORE), MIPS64_GENERIC)) | |||||
| CCOMMON_OPT += -DNO_MSA | |||||
| FCOMMON_OPT += -DNO_MSA | |||||
| endif | |||||
| ifneq (, $(filter $(CORE),LOONGSON3R3 LOONGSON3R4)) | ifneq (, $(filter $(CORE),LOONGSON3R3 LOONGSON3R4)) | ||||
| CCOMMON_OPT += -march=loongson3a | CCOMMON_OPT += -march=loongson3a | ||||
| FCOMMON_OPT += -march=loongson3a | FCOMMON_OPT += -march=loongson3a | ||||
| @@ -65,6 +65,7 @@ MIPS1004K | |||||
| MIPS24K | MIPS24K | ||||
| 4.MIPS64 CPU: | 4.MIPS64 CPU: | ||||
| MIPS64_GENERIC | |||||
| SICORTEX | SICORTEX | ||||
| LOONGSON3A | LOONGSON3A | ||||
| LOONGSON3B | LOONGSON3B | ||||
| @@ -86,7 +86,9 @@ static inline unsigned int rpcc(void){ | |||||
| //__asm__ __volatile__("dmfc0 %0, $25, 1": "=r"(tmp):: "memory"); | //__asm__ __volatile__("dmfc0 %0, $25, 1": "=r"(tmp):: "memory"); | ||||
| //ret=tmp; | //ret=tmp; | ||||
| __asm__ __volatile__(".set push \n" | __asm__ __volatile__(".set push \n" | ||||
| #if !defined(__mips_isa_rev) || __mips_isa_rev < 2 | |||||
| ".set mips32r2\n" | ".set mips32r2\n" | ||||
| #endif | |||||
| "rdhwr %0, $2\n" | "rdhwr %0, $2\n" | ||||
| ".set pop": "=r"(ret):: "memory"); | ".set pop": "=r"(ret):: "memory"); | ||||
| @@ -99,7 +101,9 @@ static inline unsigned int rpcc(void){ | |||||
| static inline int WhereAmI(void){ | static inline int WhereAmI(void){ | ||||
| int ret=0; | int ret=0; | ||||
| __asm__ __volatile__(".set push \n" | __asm__ __volatile__(".set push \n" | ||||
| #if !defined(__mips_isa_rev) || __mips_isa_rev < 2 | |||||
| ".set mips32r2\n" | ".set mips32r2\n" | ||||
| #endif | |||||
| "rdhwr %0, $0\n" | "rdhwr %0, $0\n" | ||||
| ".set pop": "=r"(ret):: "memory"); | ".set pop": "=r"(ret):: "memory"); | ||||
| return ret; | return ret; | ||||
| @@ -197,9 +201,15 @@ static inline int blas_quickdivide(blasint x, blasint y){ | |||||
| #if defined(ASSEMBLER) && !defined(NEEDPARAM) | #if defined(ASSEMBLER) && !defined(NEEDPARAM) | ||||
| #if defined(__mips_isa_rev) && __mips_isa_rev >= 6 | |||||
| #define ASSEMBLER_ARCH mips64r6 | |||||
| #else | |||||
| #define ASSEMBLER_ARCH mips64 | |||||
| #endif | |||||
| #define PROLOGUE \ | #define PROLOGUE \ | ||||
| .text ;\ | .text ;\ | ||||
| .set mips64 ;\ | |||||
| .set ASSEMBLER_ARCH ;\ | |||||
| .align 5 ;\ | .align 5 ;\ | ||||
| .globl REALNAME ;\ | .globl REALNAME ;\ | ||||
| .ent REALNAME ;\ | .ent REALNAME ;\ | ||||
| @@ -70,16 +70,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| /* or implied, of The University of Texas at Austin. */ | /* or implied, of The University of Texas at Austin. */ | ||||
| /*********************************************************************/ | /*********************************************************************/ | ||||
| #define CPU_UNKNOWN 0 | |||||
| #define CPU_SICORTEX 1 | |||||
| #define CPU_LOONGSON3R3 2 | |||||
| #define CPU_LOONGSON3R4 3 | |||||
| #define CPU_I6400 4 | |||||
| #define CPU_P6600 5 | |||||
| #define CPU_I6500 6 | |||||
| #define CPU_UNKNOWN 0 | |||||
| #define CPU_MIPS64_GENERIC 1 | |||||
| #define CPU_SICORTEX 2 | |||||
| #define CPU_LOONGSON3R3 3 | |||||
| #define CPU_LOONGSON3R4 4 | |||||
| #define CPU_I6400 5 | |||||
| #define CPU_P6600 6 | |||||
| #define CPU_I6500 7 | |||||
| static char *cpuname[] = { | static char *cpuname[] = { | ||||
| "UNKNOWN", | "UNKNOWN", | ||||
| "MIPS64_GENERIC" | |||||
| "SICORTEX", | "SICORTEX", | ||||
| "LOONGSON3R3", | "LOONGSON3R3", | ||||
| "LOONGSON3R4", | "LOONGSON3R4", | ||||
| @@ -113,8 +115,11 @@ int detect(void){ | |||||
| return CPU_SICORTEX; | return CPU_SICORTEX; | ||||
| } | } | ||||
| } | } | ||||
| return CPU_MIPS64_GENERIC; | |||||
| #else | |||||
| return CPU_UNKNOWN; | |||||
| #endif | #endif | ||||
| return CPU_UNKNOWN; | |||||
| } | } | ||||
| char *get_corename(void){ | char *get_corename(void){ | ||||
| @@ -136,9 +141,11 @@ void get_subarchitecture(void){ | |||||
| printf("P6600"); | printf("P6600"); | ||||
| }else if(detect()==CPU_I6500){ | }else if(detect()==CPU_I6500){ | ||||
| printf("I6500"); | printf("I6500"); | ||||
| }else{ | |||||
| }else if(detect()==CPU_SICORTEX){ | |||||
| printf("SICORTEX"); | printf("SICORTEX"); | ||||
| } | |||||
| }else{ | |||||
| printf("MIPS64_GENERIC"); | |||||
| } | |||||
| } | } | ||||
| void get_subdirname(void){ | void get_subdirname(void){ | ||||
| @@ -215,8 +222,8 @@ void get_libname(void){ | |||||
| printf("p6600\n"); | printf("p6600\n"); | ||||
| }else if(detect()==CPU_I6500) { | }else if(detect()==CPU_I6500) { | ||||
| printf("i6500\n"); | printf("i6500\n"); | ||||
| }else{ | |||||
| printf("mips64\n"); | |||||
| }else { | |||||
| printf("mips64_generic\n"); | |||||
| } | } | ||||
| } | } | ||||
| @@ -38,22 +38,48 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| #include <sys/resource.h> | #include <sys/resource.h> | ||||
| #include "common.h" | #include "common.h" | ||||
| #if (defined OS_LINUX || defined OS_ANDROID) | |||||
| #include <asm/hwcap.h> | |||||
| #include <sys/auxv.h> | |||||
| #ifndef HWCAP_LOONGSON_CPUCFG | |||||
| #define HWCAP_LOONGSON_CPUCFG (1 << 14) | |||||
| #endif | |||||
| #endif | |||||
| #ifdef DYNAMIC_LIST | |||||
| extern gotoblas_t gotoblas_MIPS64_GENERIC; | |||||
| #ifdef DYN_LOONGSON3R3 | |||||
| extern gotoblas_t gotoblas_LOONGSON3R3; | extern gotoblas_t gotoblas_LOONGSON3R3; | ||||
| #else | |||||
| #define gotoblas_LOONGSON3R3 gotoblas_MIPS64_GENERIC | |||||
| #endif | |||||
| #ifdef DYN_LOONGSON3R4 | |||||
| extern gotoblas_t gotoblas_LOONGSON3R4; | extern gotoblas_t gotoblas_LOONGSON3R4; | ||||
| #else | |||||
| #define gotoblas_LOONGSON3R4 gotoblas_MIPS64_GENERIC | |||||
| #endif | |||||
| #else | |||||
| extern gotoblas_t gotoblas_LOONGSON3R3; | |||||
| extern gotoblas_t gotoblas_LOONGSON3R4; | |||||
| extern gotoblas_t gotoblas_MIPS64_GENERIC; | |||||
| #endif | |||||
| extern void openblas_warning(int verbose, const char * msg); | extern void openblas_warning(int verbose, const char * msg); | ||||
| #define NUM_CORETYPES 2 | |||||
| #define NUM_CORETYPES 3 | |||||
| static char *corename[] = { | static char *corename[] = { | ||||
| "MIPS64_GENERIC" | |||||
| "loongson3r3", | "loongson3r3", | ||||
| "loongson3r4", | "loongson3r4", | ||||
| "UNKNOWN" | "UNKNOWN" | ||||
| }; | }; | ||||
| char *gotoblas_corename(void) { | char *gotoblas_corename(void) { | ||||
| if (gotoblas == &gotoblas_LOONGSON3R3) return corename[0]; | |||||
| if (gotoblas == &gotoblas_LOONGSON3R4) return corename[1]; | |||||
| if (gotoblas == &gotoblas_MIPS64_GENERIC) return corename[0]; | |||||
| if (gotoblas == &gotoblas_LOONGSON3R3) return corename[1]; | |||||
| if (gotoblas == &gotoblas_LOONGSON3R4) return corename[2]; | |||||
| return corename[NUM_CORETYPES]; | return corename[NUM_CORETYPES]; | ||||
| } | } | ||||
| @@ -73,77 +99,32 @@ static gotoblas_t *force_coretype(char *coretype) { | |||||
| switch (found) | switch (found) | ||||
| { | { | ||||
| case 0: return (&gotoblas_LOONGSON3R3); | |||||
| case 1: return (&gotoblas_LOONGSON3R4); | |||||
| case 0: return (&gotoblas_MIPS64_GENERIC); | |||||
| case 1: return (&gotoblas_LOONGSON3R3); | |||||
| case 2: return (&gotoblas_LOONGSON3R4); | |||||
| } | } | ||||
| snprintf(message, 128, "Core not found: %s\n", coretype); | snprintf(message, 128, "Core not found: %s\n", coretype); | ||||
| openblas_warning(1, message); | openblas_warning(1, message); | ||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| #if (defined OS_LINUX || defined OS_ANDROID) | |||||
| #define MMI_MASK 0x00000010 | #define MMI_MASK 0x00000010 | ||||
| #define MSA_MASK 0x00000020 | #define MSA_MASK 0x00000020 | ||||
| int fd[2]; | |||||
| int support_cpucfg; | |||||
| static void handler(int signum) | |||||
| { | |||||
| close(fd[1]); | |||||
| exit(1); | |||||
| } | |||||
| /* Brief : Function to check if cpucfg supported on loongson | |||||
| * Return: 1 supported | |||||
| * 0 not supported | |||||
| */ | |||||
| static int cpucfg_test(void) { | |||||
| pid_t pid; | |||||
| int status = 0; | |||||
| support_cpucfg = 0; | |||||
| pipe(fd); | |||||
| pid = fork(); | |||||
| if (pid == 0) { /* Subprocess */ | |||||
| struct sigaction act; | |||||
| close(fd[0]); | |||||
| /* Set signal action for SIGILL. */ | |||||
| act.sa_handler = handler; | |||||
| sigaction(SIGILL,&act,NULL); | |||||
| /* Execute cpucfg in subprocess. */ | |||||
| __asm__ volatile( | |||||
| ".insn \n\t" | |||||
| ".word (0xc8080118) \n\t" | |||||
| ::: | |||||
| ); | |||||
| support_cpucfg = 1; | |||||
| write(fd[1],&support_cpucfg,sizeof(support_cpucfg)); | |||||
| close(fd[1]); | |||||
| exit(0); | |||||
| } else if (pid > 0){ /* Parent process*/ | |||||
| close(fd[1]); | |||||
| if ((waitpid(pid,&status,0) <= 0) || | |||||
| (read(fd[0],&support_cpucfg,sizeof(support_cpucfg)) <= 0)) | |||||
| support_cpucfg = 0; | |||||
| close(fd[0]); | |||||
| } else { | |||||
| support_cpucfg = 0; | |||||
| } | |||||
| return support_cpucfg; | |||||
| } | |||||
| static gotoblas_t *get_coretype_from_cpucfg(void) { | static gotoblas_t *get_coretype_from_cpucfg(void) { | ||||
| int flag = 0; | int flag = 0; | ||||
| __asm__ volatile( | __asm__ volatile( | ||||
| ".set push \n\t" | |||||
| ".set noat \n\t" | |||||
| ".insn \n\t" | ".insn \n\t" | ||||
| "dli $8, 0x01 \n\t" | |||||
| ".word (0xc9084918) \n\t" | |||||
| "usw $9, 0x00(%0) \n\t" | |||||
| "dli $1, 0x01 \n\t" | |||||
| ".word (0xc8080118) \n\t" | |||||
| "move %0, $1 \n\t" | |||||
| ".set pop \n\t" | |||||
| : "=r"(flag) | |||||
| : | |||||
| : | : | ||||
| : "r"(&flag) | |||||
| : "memory" | |||||
| ); | ); | ||||
| if (flag & MSA_MASK) | if (flag & MSA_MASK) | ||||
| return (&gotoblas_LOONGSON3R4); | return (&gotoblas_LOONGSON3R4); | ||||
| @@ -153,7 +134,7 @@ static gotoblas_t *get_coretype_from_cpucfg(void) { | |||||
| } | } | ||||
| static gotoblas_t *get_coretype_from_cpuinfo(void) { | static gotoblas_t *get_coretype_from_cpuinfo(void) { | ||||
| #ifdef linux | |||||
| #ifdef __linux | |||||
| FILE *infile; | FILE *infile; | ||||
| char buffer[512], *p; | char buffer[512], *p; | ||||
| @@ -176,17 +157,19 @@ static gotoblas_t *get_coretype_from_cpuinfo(void) { | |||||
| return NULL; | return NULL; | ||||
| } | } | ||||
| #endif | #endif | ||||
| return NULL; | |||||
| return NULL; | |||||
| } | } | ||||
| #endif | |||||
| static gotoblas_t *get_coretype(void) { | static gotoblas_t *get_coretype(void) { | ||||
| int ret = 0; | |||||
| ret = cpucfg_test(); | |||||
| if (ret == 1) | |||||
| return get_coretype_from_cpucfg(); | |||||
| else | |||||
| return get_coretype_from_cpuinfo(); | |||||
| #if (!defined OS_LINUX && !defined OS_ANDROID) | |||||
| return NULL; | |||||
| #else | |||||
| if (!(getauxval(AT_HWCAP) & HWCAP_LOONGSON_CPUCFG)) | |||||
| return get_coretype_from_cpucfg(); | |||||
| else | |||||
| return get_coretype_from_cpuinfo(); | |||||
| #endif | |||||
| } | } | ||||
| void gotoblas_dynamic_init(void) { | void gotoblas_dynamic_init(void) { | ||||
| @@ -208,9 +191,9 @@ void gotoblas_dynamic_init(void) { | |||||
| if (gotoblas == NULL) | if (gotoblas == NULL) | ||||
| { | { | ||||
| snprintf(coremsg, 128, "Falling back to loongson3r3 core\n"); | |||||
| snprintf(coremsg, 128, "Falling back to MIPS64_GENEIRC\n"); | |||||
| openblas_warning(1, coremsg); | openblas_warning(1, coremsg); | ||||
| gotoblas = &gotoblas_LOONGSON3R3; | |||||
| gotoblas = &gotoblas_MIPS64_GENERIC; | |||||
| } | } | ||||
| if (gotoblas && gotoblas->init) { | if (gotoblas && gotoblas->init) { | ||||
| @@ -131,6 +131,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| /* #define FORCE_PPC440 */ | /* #define FORCE_PPC440 */ | ||||
| /* #define FORCE_PPC440FP2 */ | /* #define FORCE_PPC440FP2 */ | ||||
| /* #define FORCE_CELL */ | /* #define FORCE_CELL */ | ||||
| /* #define FORCE_MIPS64_GENERIC */ | |||||
| /* #define FORCE_SICORTEX */ | /* #define FORCE_SICORTEX */ | ||||
| /* #define FORCE_LOONGSON3R3 */ | /* #define FORCE_LOONGSON3R3 */ | ||||
| /* #define FORCE_LOONGSON3R4 */ | /* #define FORCE_LOONGSON3R4 */ | ||||
| @@ -918,6 +919,20 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| #define CORENAME "CELL" | #define CORENAME "CELL" | ||||
| #endif | #endif | ||||
| #ifdef FORCE_MIPS64_GENERIC | |||||
| #define FORCE | |||||
| #define ARCHITECTURE "MIPS" | |||||
| #define SUBARCHITECTURE "MIPS64_GENERIC" | |||||
| #define SUBDIRNAME "mips64" | |||||
| #define ARCHCONFIG "-DMIPS64_GENERIC " \ | |||||
| "-DL1_DATA_SIZE=65536 -DL1_DATA_LINESIZE=32 " \ | |||||
| "-DL2_SIZE=1048576 -DL2_LINESIZE=32 " \ | |||||
| "-DDTB_DEFAULT_ENTRIES=64 -DDTB_SIZE=4096 -DL2_ASSOCIATIVE=8 " | |||||
| #define LIBNAME "mips64_generic" | |||||
| #define CORENAME "MIPS64_GENERIC" | |||||
| #else | |||||
| #endif | |||||
| #ifdef FORCE_SICORTEX | #ifdef FORCE_SICORTEX | ||||
| #define FORCE | #define FORCE | ||||
| #define ARCHITECTURE "MIPS" | #define ARCHITECTURE "MIPS" | ||||
| @@ -42,50 +42,58 @@ endif | |||||
| ifndef SGEMMKERNEL | ifndef SGEMMKERNEL | ||||
| SGEMMKERNEL = gemm_kernel.S | SGEMMKERNEL = gemm_kernel.S | ||||
| ifneq ($(SGEMM_UNROLL_M), $(SGEMM_UNROLL_N)) | |||||
| SGEMMINCOPY = ../generic/gemm_ncopy_2.c | SGEMMINCOPY = ../generic/gemm_ncopy_2.c | ||||
| SGEMMITCOPY = ../generic/gemm_tcopy_2.c | SGEMMITCOPY = ../generic/gemm_tcopy_2.c | ||||
| SGEMMINCOPYOBJ = sgemm_incopy$(TSUFFIX).$(SUFFIX) | |||||
| SGEMMITCOPYOBJ = sgemm_itcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | |||||
| SGEMMONCOPY = ../generic/gemm_ncopy_8.c | SGEMMONCOPY = ../generic/gemm_ncopy_8.c | ||||
| SGEMMOTCOPY = ../generic/gemm_tcopy_8.c | SGEMMOTCOPY = ../generic/gemm_tcopy_8.c | ||||
| SGEMMINCOPYOBJ = sgemm_incopy.o | |||||
| SGEMMITCOPYOBJ = sgemm_itcopy.o | |||||
| SGEMMONCOPYOBJ = sgemm_oncopy.o | |||||
| SGEMMOTCOPYOBJ = sgemm_otcopy.o | |||||
| SGEMMONCOPYOBJ = sgemm_oncopy$(TSUFFIX).$(SUFFIX) | |||||
| SGEMMOTCOPYOBJ = sgemm_otcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | endif | ||||
| ifndef DGEMMKERNEL | ifndef DGEMMKERNEL | ||||
| DGEMMKERNEL = gemm_kernel.S | DGEMMKERNEL = gemm_kernel.S | ||||
| ifneq ($(DGEMM_UNROLL_M), $(DGEMM_UNROLL_N)) | |||||
| DGEMMINCOPY = ../generic/gemm_ncopy_2.c | DGEMMINCOPY = ../generic/gemm_ncopy_2.c | ||||
| DGEMMITCOPY = ../generic/gemm_tcopy_2.c | DGEMMITCOPY = ../generic/gemm_tcopy_2.c | ||||
| DGEMMINCOPYOBJ = dgemm_incopy$(TSUFFIX).$(SUFFIX) | |||||
| DGEMMITCOPYOBJ = dgemm_itcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | |||||
| DGEMMONCOPY = ../generic/gemm_ncopy_8.c | DGEMMONCOPY = ../generic/gemm_ncopy_8.c | ||||
| DGEMMOTCOPY = ../generic/gemm_tcopy_8.c | DGEMMOTCOPY = ../generic/gemm_tcopy_8.c | ||||
| DGEMMINCOPYOBJ = dgemm_incopy.o | |||||
| DGEMMITCOPYOBJ = dgemm_itcopy.o | |||||
| DGEMMONCOPYOBJ = dgemm_oncopy.o | |||||
| DGEMMOTCOPYOBJ = dgemm_otcopy.o | |||||
| DGEMMONCOPYOBJ = dgemm_oncopy$(TSUFFIX).$(SUFFIX) | |||||
| DGEMMOTCOPYOBJ = dgemm_otcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | endif | ||||
| ifndef CGEMMKERNEL | ifndef CGEMMKERNEL | ||||
| CGEMMKERNEL = zgemm_kernel.S | CGEMMKERNEL = zgemm_kernel.S | ||||
| ifneq ($(CGEMM_UNROLL_M), $(CGEMM_UNROLL_N)) | |||||
| CGEMMINCOPY = ../generic/zgemm_ncopy_1.c | CGEMMINCOPY = ../generic/zgemm_ncopy_1.c | ||||
| CGEMMITCOPY = ../generic/zgemm_tcopy_1.c | CGEMMITCOPY = ../generic/zgemm_tcopy_1.c | ||||
| CGEMMINCOPYOBJ = cgemm_incopy$(TSUFFIX).$(SUFFIX) | |||||
| CGEMMITCOPYOBJ = cgemm_itcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | |||||
| CGEMMONCOPY = ../generic/zgemm_ncopy_4.c | CGEMMONCOPY = ../generic/zgemm_ncopy_4.c | ||||
| CGEMMOTCOPY = ../generic/zgemm_tcopy_4.c | CGEMMOTCOPY = ../generic/zgemm_tcopy_4.c | ||||
| CGEMMINCOPYOBJ = cgemm_incopy.o | |||||
| CGEMMITCOPYOBJ = cgemm_itcopy.o | |||||
| CGEMMONCOPYOBJ = cgemm_oncopy.o | |||||
| CGEMMOTCOPYOBJ = cgemm_otcopy.o | |||||
| CGEMMONCOPYOBJ = cgemm_oncopy$(TSUFFIX).$(SUFFIX) | |||||
| CGEMMOTCOPYOBJ = cgemm_otcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | endif | ||||
| ifndef ZGEMMKERNEL | ifndef ZGEMMKERNEL | ||||
| ZGEMMKERNEL = zgemm_kernel.S | ZGEMMKERNEL = zgemm_kernel.S | ||||
| ifneq ($(ZGEMM_UNROLL_M), $(ZGEMM_UNROLL_N)) | |||||
| ZGEMMINCOPY = ../generic/zgemm_ncopy_1.c | ZGEMMINCOPY = ../generic/zgemm_ncopy_1.c | ||||
| ZGEMMITCOPY = ../generic/zgemm_tcopy_1.c | ZGEMMITCOPY = ../generic/zgemm_tcopy_1.c | ||||
| ZGEMMINCOPYOBJ = zgemm_incopy$(TSUFFIX).$(SUFFIX) | |||||
| ZGEMMITCOPYOBJ = zgemm_itcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | |||||
| ZGEMMONCOPY = ../generic/zgemm_ncopy_4.c | ZGEMMONCOPY = ../generic/zgemm_ncopy_4.c | ||||
| ZGEMMOTCOPY = ../generic/zgemm_tcopy_4.c | ZGEMMOTCOPY = ../generic/zgemm_tcopy_4.c | ||||
| ZGEMMINCOPYOBJ = zgemm_incopy.o | |||||
| ZGEMMITCOPYOBJ = zgemm_itcopy.o | |||||
| ZGEMMONCOPYOBJ = zgemm_oncopy.o | |||||
| ZGEMMOTCOPYOBJ = zgemm_otcopy.o | |||||
| ZGEMMONCOPYOBJ = zgemm_oncopy$(TSUFFIX).$(SUFFIX) | |||||
| ZGEMMOTCOPYOBJ = zgemm_otcopy$(TSUFFIX).$(SUFFIX) | |||||
| endif | endif | ||||
| ifndef SGEMM_BETA | ifndef SGEMM_BETA | ||||
| @@ -2945,7 +2945,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||
| #define SYMV_P 16 | #define SYMV_P 16 | ||||
| #endif | #endif | ||||
| #if defined(P5600) || defined(MIPS1004K) || defined(MIPS24K) || defined(I6400) || defined(P6600) || defined(I6500) | |||||
| #if defined(MIPS64_GENERIC) || defined(P5600) || defined(MIPS1004K) || defined(MIPS24K) || defined(I6400) || defined(P6600) || defined(I6500) | |||||
| #define SNUMOPT 2 | #define SNUMOPT 2 | ||||
| #define DNUMOPT 2 | #define DNUMOPT 2 | ||||