diff --git a/Makefile.system b/Makefile.system index c0ef0b6a4..b1f9ba514 100644 --- a/Makefile.system +++ b/Makefile.system @@ -77,6 +77,11 @@ ifndef NO_PARALLEL_MAKE NO_PARALLEL_MAKE=0 endif GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE) + +ifeq ($(HOSTCC), loongcc) +GETARCH_FLAGS += -static +endif + # This operation is expensive, so execution should be once. ifndef GOTOBLAS_MAKEFILE export GOTOBLAS_MAKEFILE = 1 @@ -568,11 +573,28 @@ ifdef INTERFACE64 FCOMMON_OPT += -i8 endif endif + +ifeq ($(ARCH), mips64) +ifndef BINARY64 +FCOMMON_OPT += -n32 +else +FCOMMON_OPT += -n64 +endif +ifeq ($(CORE), LOONGSON3A) +FCOMMON_OPT += -loongson3 -static +endif + +ifeq ($(CORE), LOONGSON3B) +FCOMMON_OPT += -loongson3 -static +endif + +else ifndef BINARY64 FCOMMON_OPT += -m32 else FCOMMON_OPT += -m64 endif +endif ifdef USE_OPENMP FEXTRALIB += -lstdc++ @@ -581,12 +603,30 @@ endif endif ifeq ($(C_COMPILER), OPEN64) + +ifeq ($(ARCH), mips64) +ifndef BINARY64 +CCOMMON_OPT += -n32 +else +CCOMMON_OPT += -n64 +endif +ifeq ($(CORE), LOONGSON3A) +CCOMMON_OPT += -loongson3 -static +endif + +ifeq ($(CORE), LOONGSON3B) +CCOMMON_OPT += -loongson3 -static +endif + +else + ifndef BINARY64 CCOMMON_OPT += -m32 else CCOMMON_OPT += -m64 endif endif +endif ifeq ($(C_COMPILER), SUN) CCOMMON_OPT += -w diff --git a/README.md b/README.md index 2c7108c6b..9e638c8e6 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,10 @@ On X86 box, compile this library for loongson3a CPU. make BINARY=64 CC=mips64el-unknown-linux-gnu-gcc FC=mips64el-unknown-linux-gnu-gfortran HOSTCC=gcc TARGET=LOONGSON3A +On X86 box, compile this library for loongson3a CPU with loongcc (based on Open64) compiler. + + make CC=loongcc FC=loongf95 HOSTCC=gcc TARGET=LOONGSON3A CROSS=1 CROSS_SUFFIX=mips64el-st-linux-gnu- NO_LAPACKE=1 NO_SHARED=1 BINARY=32 + ### Debug version make DEBUG=1 diff --git a/common_mips64.h b/common_mips64.h index 85348377e..1bee69407 100644 --- a/common_mips64.h +++ b/common_mips64.h @@ -255,8 +255,8 @@ REALNAME: ;\ #endif #if defined(LOONGSON3B) -#define PAGESIZE (32UL << 10) -#define FIXED_PAGESIZE (32UL << 10) +#define PAGESIZE (16UL << 10) +#define FIXED_PAGESIZE (16UL << 10) #endif #ifndef PAGESIZE diff --git a/driver/level3/gemm_thread_n.c b/driver/level3/gemm_thread_n.c index f9007f831..3e11f9aba 100644 --- a/driver/level3/gemm_thread_n.c +++ b/driver/level3/gemm_thread_n.c @@ -71,7 +71,7 @@ int CNAME(int mode, blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n, int ( queue[num_cpu].args = arg; queue[num_cpu].range_m = range_m; queue[num_cpu].range_n = &range[num_cpu]; -#if defined(LOONGSON3A) +#if 0 //defined(LOONGSON3A) queue[num_cpu].sa = sa + GEMM_OFFSET_A1 * num_cpu; queue[num_cpu].sb = queue[num_cpu].sa + GEMM_OFFSET_A1 * 5; #else @@ -83,7 +83,7 @@ int CNAME(int mode, blas_arg_t *arg, BLASLONG *range_m, BLASLONG *range_n, int ( } if (num_cpu) { -#if defined(LOONGSON3A) +#if 0 //defined(LOONGSON3A) queue[0].sa = sa; queue[0].sb = sa + GEMM_OFFSET_A1 * 5; #else