Skip to content

Commit bc4c98d

Browse files
authored
Merge pull request #3456 from martin-frbg/issue3444
Add/restore a GENERIC target for MIPS32 and support MIPS32 cross-compilation using CMAKE
2 parents c3b1e55 + 52a3f00 commit bc4c98d

File tree

6 files changed

+216
-2
lines changed

6 files changed

+216
-2
lines changed

cmake/arch.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ if (${ARCH} STREQUAL "ia64")
109109
endif ()
110110
endif ()
111111

112-
if (MIPS64)
112+
if (MIPS32 OR MIPS64)
113113
set(NO_BINARY_MODE 1)
114114
endif ()
115115

cmake/cc.cmake

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_C_COMPILER_ID} STREQUAL "LS
1515

1616
if (NO_BINARY_MODE)
1717

18+
if (MIPS32)
19+
set(CCOMMON_OPT "${CCOMMON_OPT} -mabi=32")
20+
set(BINARY_DEFINED 1)
21+
endif ()
22+
1823
if (MIPS64)
1924
if (BINARY64)
2025
set(CCOMMON_OPT "${CCOMMON_OPT} -mabi=64")

cmake/prebuild.cmake

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,7 @@ endif ()
416416
set(ZGEMM_UNROLL_M 4)
417417
set(ZGEMM_UNROLL_N 4)
418418
set(SYMV_P 16)
419-
elseif ("${TCORE}" STREQUAL "VORTEX")
419+
elseif ("${TCORE}" STREQUAL "VORTEX")
420420
file(APPEND ${TARGET_CONF_TEMP}
421421
"#define ARMV8\n"
422422
"#define L1_CODE_SIZE\t32768\n"
@@ -439,6 +439,34 @@ elseif ("${TCORE}" STREQUAL "VORTEX")
439439
set(ZGEMM_UNROLL_M 4)
440440
set(ZGEMM_UNROLL_N 4)
441441
set(SYMV_P 16)
442+
elseif ("${TCORE}" STREQUAL "P5600")
443+
file(APPEND ${TARGET_CONF_TEMP}
444+
"#define L2_SIZE 1048576\n"
445+
"#define DTB_SIZE 4096\n"
446+
"#define DTB_DEFAULT_ENTRIES 64\n")
447+
set(SGEMM_UNROLL_M 2)
448+
set(SGEMM_UNROLL_N 2)
449+
set(DGEMM_UNROLL_M 2)
450+
set(DGEMM_UNROLL_N 2)
451+
set(CGEMM_UNROLL_M 2)
452+
set(CGEMM_UNROLL_N 2)
453+
set(ZGEMM_UNROLL_M 2)
454+
set(ZGEMM_UNROLL_N 2)
455+
set(SYMV_P 16)
456+
elseif ("${TCORE}" MATCHES "MIPS")
457+
file(APPEND ${TARGET_CONF_TEMP}
458+
"#define L2_SIZE 262144\n"
459+
"#define DTB_SIZE 4096\n"
460+
"#define DTB_DEFAULT_ENTRIES 64\n")
461+
set(SGEMM_UNROLL_M 2)
462+
set(SGEMM_UNROLL_N 2)
463+
set(DGEMM_UNROLL_M 2)
464+
set(DGEMM_UNROLL_N 2)
465+
set(CGEMM_UNROLL_M 2)
466+
set(CGEMM_UNROLL_N 2)
467+
set(ZGEMM_UNROLL_M 2)
468+
set(ZGEMM_UNROLL_N 2)
469+
set(SYMV_P 16)
442470
elseif ("${TCORE}" STREQUAL "POWER6")
443471
file(APPEND ${TARGET_CONF_TEMP}
444472
"#define L1_DATA_SIZE 32768\n"

cmake/system_check.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ elseif (${CMAKE_CROSSCOMPILING})
7373
else ()
7474
set(X86 1)
7575
endif()
76+
elseif (${TARGET} STREQUAL "P5600" OR ${TARGET} MATCHES "MIPS.*")
77+
set(MIPS32 1)
7678
elseif (${TARGET} STREQUAL "ARMV7")
7779
set(ARM 1)
7880
else()
@@ -88,6 +90,10 @@ elseif(X86)
8890
set(ARCH "x86")
8991
elseif(PPC)
9092
set(ARCH "power")
93+
elseif(MIPS32)
94+
set(ARCH "mips")
95+
elseif(MIPS64)
96+
set(ARCH "mips64")
9197
elseif(ARM)
9298
set(ARCH "arm")
9399
elseif(ARM64)

kernel/mips/KERNEL.generic

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
SGEMM_BETA = ../generic/gemm_beta.c
2+
DGEMM_BETA = ../generic/gemm_beta.c
3+
CGEMM_BETA = ../generic/zgemm_beta.c
4+
ZGEMM_BETA = ../generic/zgemm_beta.c
5+
6+
STRMMKERNEL = ../generic/trmmkernel_2x2.c
7+
DTRMMKERNEL = ../generic/trmmkernel_2x2.c
8+
CTRMMKERNEL = ../generic/ztrmmkernel_2x2.c
9+
ZTRMMKERNEL = ../generic/ztrmmkernel_2x2.c
10+
11+
SGEMMKERNEL = ../generic/gemmkernel_2x2.c
12+
SGEMMONCOPY = ../generic/gemm_ncopy_2.c
13+
SGEMMOTCOPY = ../generic/gemm_tcopy_2.c
14+
SGEMMONCOPYOBJ = sgemm_oncopy.o
15+
SGEMMOTCOPYOBJ = sgemm_otcopy.o
16+
17+
DGEMMKERNEL = ../generic/gemmkernel_2x2.c
18+
DGEMMONCOPY = ../generic/gemm_ncopy_2.c
19+
DGEMMOTCOPY = ../generic/gemm_tcopy_2.c
20+
DGEMMONCOPYOBJ = dgemm_oncopy.o
21+
DGEMMOTCOPYOBJ = dgemm_otcopy.o
22+
23+
CGEMMKERNEL = ../generic/zgemmkernel_2x2.c
24+
CGEMMONCOPY = ../generic/zgemm_ncopy_2.c
25+
CGEMMOTCOPY = ../generic/zgemm_tcopy_2.c
26+
CGEMMONCOPYOBJ = cgemm_oncopy.o
27+
CGEMMOTCOPYOBJ = cgemm_otcopy.o
28+
29+
ZGEMMKERNEL = ../generic/zgemmkernel_2x2.c
30+
ZGEMMONCOPY = ../generic/zgemm_ncopy_2.c
31+
ZGEMMOTCOPY = ../generic/zgemm_tcopy_2.c
32+
ZGEMMONCOPYOBJ = zgemm_oncopy.o
33+
ZGEMMOTCOPYOBJ = zgemm_otcopy.o
34+
35+
STRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
36+
STRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
37+
STRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
38+
STRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
39+
40+
DTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
41+
DTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
42+
DTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
43+
DTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
44+
45+
CTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
46+
CTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
47+
CTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
48+
CTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
49+
50+
ZTRSMKERNEL_LN = ../generic/trsm_kernel_LN.c
51+
ZTRSMKERNEL_LT = ../generic/trsm_kernel_LT.c
52+
ZTRSMKERNEL_RN = ../generic/trsm_kernel_RN.c
53+
ZTRSMKERNEL_RT = ../generic/trsm_kernel_RT.c
54+
55+
#Pure C for other kernels
56+
SAMAXKERNEL = ../mips/amax.c
57+
DAMAXKERNEL = ../mips/amax.c
58+
CAMAXKERNEL = ../mips/zamax.c
59+
ZAMAXKERNEL = ../mips/zamax.c
60+
61+
SAMINKERNEL = ../mips/amin.c
62+
DAMINKERNEL = ../mips/amin.c
63+
CAMINKERNEL = ../mips/zamin.c
64+
ZAMINKERNEL = ../mips/zamin.c
65+
66+
SMAXKERNEL = ../mips/max.c
67+
DMAXKERNEL = ../mips/max.c
68+
69+
SMINKERNEL = ../mips/min.c
70+
DMINKERNEL = ../mips/min.c
71+
72+
ISAMAXKERNEL = ../mips/iamax.c
73+
IDAMAXKERNEL = ../mips/iamax.c
74+
ICAMAXKERNEL = ../mips/izamax.c
75+
IZAMAXKERNEL = ../mips/izamax.c
76+
77+
ISAMINKERNEL = ../mips/iamin.c
78+
IDAMINKERNEL = ../mips/iamin.c
79+
ICAMINKERNEL = ../mips/izamin.c
80+
IZAMINKERNEL = ../mips/izamin.c
81+
82+
ISMAXKERNEL = ../mips/imax.c
83+
IDMAXKERNEL = ../mips/imax.c
84+
85+
ISMINKERNEL = ../mips/imin.c
86+
IDMINKERNEL = ../mips/imin.c
87+
88+
SASUMKERNEL = ../mips/asum.c
89+
DASUMKERNEL = ../mips/asum.c
90+
CASUMKERNEL = ../mips/zasum.c
91+
ZASUMKERNEL = ../mips/zasum.c
92+
93+
SSUMKERNEL = ../mips/sum.c
94+
DSUMKERNEL = ../mips/sum.c
95+
CSUMKERNEL = ../mips/zsum.c
96+
ZSUMKERNEL = ../mips/zsum.c
97+
98+
SAXPYKERNEL = ../mips/axpy.c
99+
DAXPYKERNEL = ../mips/axpy.c
100+
CAXPYKERNEL = ../mips/zaxpy.c
101+
ZAXPYKERNEL = ../mips/zaxpy.c
102+
103+
SCOPYKERNEL = ../mips/copy.c
104+
DCOPYKERNEL = ../mips/copy.c
105+
CCOPYKERNEL = ../mips/zcopy.c
106+
ZCOPYKERNEL = ../mips/zcopy.c
107+
108+
SDOTKERNEL = ../mips/dot.c
109+
DDOTKERNEL = ../mips/dot.c
110+
CDOTKERNEL = ../mips/zdot.c
111+
ZDOTKERNEL = ../mips/zdot.c
112+
113+
SNRM2KERNEL = ../mips/nrm2.c
114+
DNRM2KERNEL = ../mips/nrm2.c
115+
CNRM2KERNEL = ../mips/znrm2.c
116+
ZNRM2KERNEL = ../mips/znrm2.c
117+
118+
SROTKERNEL = ../mips/rot.c
119+
DROTKERNEL = ../mips/rot.c
120+
CROTKERNEL = ../mips/zrot.c
121+
ZROTKERNEL = ../mips/zrot.c
122+
123+
SSCALKERNEL = ../mips/scal.c
124+
DSCALKERNEL = ../mips/scal.c
125+
CSCALKERNEL = ../mips/zscal.c
126+
ZSCALKERNEL = ../mips/zscal.c
127+
128+
SSWAPKERNEL = ../mips/swap.c
129+
DSWAPKERNEL = ../mips/swap.c
130+
CSWAPKERNEL = ../mips/zswap.c
131+
ZSWAPKERNEL = ../mips/zswap.c
132+
133+
SGEMVNKERNEL = ../mips/gemv_n.c
134+
DGEMVNKERNEL = ../mips/gemv_n.c
135+
CGEMVNKERNEL = ../mips/zgemv_n.c
136+
ZGEMVNKERNEL = ../mips/zgemv_n.c
137+
138+
SGEMVTKERNEL = ../mips/gemv_t.c
139+
DGEMVTKERNEL = ../mips/gemv_t.c
140+
CGEMVTKERNEL = ../mips/zgemv_t.c
141+
ZGEMVTKERNEL = ../mips/zgemv_t.c
142+
143+
SSYMV_U_KERNEL = ../generic/symv_k.c
144+
SSYMV_L_KERNEL = ../generic/symv_k.c
145+
DSYMV_U_KERNEL = ../generic/symv_k.c
146+
DSYMV_L_KERNEL = ../generic/symv_k.c
147+
QSYMV_U_KERNEL = ../generic/symv_k.c
148+
QSYMV_L_KERNEL = ../generic/symv_k.c
149+
CSYMV_U_KERNEL = ../generic/zsymv_k.c
150+
CSYMV_L_KERNEL = ../generic/zsymv_k.c
151+
ZSYMV_U_KERNEL = ../generic/zsymv_k.c
152+
ZSYMV_L_KERNEL = ../generic/zsymv_k.c
153+
XSYMV_U_KERNEL = ../generic/zsymv_k.c
154+
XSYMV_L_KERNEL = ../generic/zsymv_k.c
155+
156+
ZHEMV_U_KERNEL = ../generic/zhemv_k.c
157+
ZHEMV_L_KERNEL = ../generic/zhemv_k.c
158+
159+
CGEMM3MKERNEL = ../generic/zgemm3mkernel_dump.c
160+
ZGEMM3MKERNEL = ../generic/zgemm3mkernel_dump.c

param.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3602,6 +3602,20 @@ is a big desktop or server with abundant cache rather than a phone or embedded d
36023602
#define XGEMM_DEFAULT_UNROLL_M 1
36033603
#endif
36043604

3605+
#ifdef ARCH_MIPS
3606+
#define SGEMM_DEFAULT_P 128
3607+
#define DGEMM_DEFAULT_P 128
3608+
#define CGEMM_DEFAULT_P 96
3609+
#define ZGEMM_DEFAULT_P 64
3610+
#define SGEMM_DEFAULT_Q 240
3611+
#define DGEMM_DEFAULT_Q 120
3612+
#define CGEMM_DEFAULT_Q 120
3613+
#define ZGEMM_DEFAULT_Q 120
3614+
#define SGEMM_DEFAULT_R 12288
3615+
#define DGEMM_DEFAULT_R 8192
3616+
#define CGEMM_DEFAULT_R 4096
3617+
#define ZGEMM_DEFAULT_R 4096
3618+
#else
36053619
#define SGEMM_DEFAULT_P sgemm_p
36063620
#define DGEMM_DEFAULT_P dgemm_p
36073621
#define QGEMM_DEFAULT_P qgemm_p
@@ -3622,6 +3636,7 @@ is a big desktop or server with abundant cache rather than a phone or embedded d
36223636
#define CGEMM_DEFAULT_Q 128
36233637
#define ZGEMM_DEFAULT_Q 128
36243638
#define XGEMM_DEFAULT_Q 128
3639+
#endif
36253640

36263641
#define SYMV_P 16
36273642

0 commit comments

Comments
 (0)