From fb891f33da3428602d765905b1395a9a7e798e4a Mon Sep 17 00:00:00 2001 From: Rafael Cardoso Fernandes Sousa Date: Wed, 24 Nov 2021 14:07:28 -0600 Subject: [PATCH 1/2] Fix the cmake parser to identify more patterns --- cmake/utils.cmake | 196 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 149 insertions(+), 47 deletions(-) diff --git a/cmake/utils.cmake b/cmake/utils.cmake index 01b489f2a..c5ee65384 100644 --- a/cmake/utils.cmake +++ b/cmake/utils.cmake @@ -15,35 +15,83 @@ endfunction () # Reads a Makefile into CMake vars. macro(ParseMakefileVars MAKEFILE_IN) message(STATUS "Reading vars from ${MAKEFILE_IN}...") - set (IfElse 0) - set (ElseSeen 0) + set (C_COMPILER ${CMAKE_C_COMPILER_ID}) + set (IfElse 0) + set (ElseSeen 0) + set (SkipIfs 0) + set (SkipElse 0) file(STRINGS ${MAKEFILE_IN} makefile_contents) foreach (makefile_line ${makefile_contents}) -#message(STATUS "parsing ${makefile_line}") - if (${IfElse} GREATER 0) + #message(STATUS "parsing ${makefile_line}") + # Skip the entire scope of the else statement given that the if statement that precedes it has the valid condition. + # The variable SkipIfs is used to identify which endif statement closes the scope of the else statement. + if (${SkipElse} EQUAL 1) + #message(STATUS "skipping ${makefile_line}") + string(REGEX MATCH "(ifeq|ifneq|ifdef|ifndef) .*$" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + MATH(EXPR SkipIfs "${SkipIfs}+1") + endif () string(REGEX MATCH "endif[ \t]*" line_match "${makefile_line}") if (NOT "${line_match}" STREQUAL "") -# message(STATUS "ENDIF ${makefile_line}") - set (IfElse 0) - set (ElseSeen 0) + if (${SkipIfs} EQUAL 0) + set (SkipElse 0) + else () + MATH(EXPR SkipIfs "${SkipIfs}-1") + endif () + endif () + continue () + endif () + # The variable IfElse is greater than 0 if and only if the previously parsed line is an if statement. + if (${IfElse} GREATER 0) + # If the current scope is the one that has to be skipped, the if/endif/else statements + # along with it till the endif that closes the current scope have to be ignored as well. + string(REGEX MATCH "(ifeq|ifneq|ifdef|ifndef) .*$" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + if ((${IfElse} EQUAL 2 AND ${ElseSeen} EQUAL 0) OR (${IfElse} EQUAL 1 AND ${ElseSeen} EQUAL 1)) + #message(STATUS "skipping ${makefile_line}") + MATH(EXPR SkipIfs "${SkipIfs}+1") + continue () + endif () + endif () + string(REGEX MATCH "endif[ \t]*" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + if (${SkipIfs} EQUAL 0) + #message(STATUS "ENDIF ${makefile_line}") + set (IfElse 0) + set (ElseSeen 0) + else () + #message(STATUS "skipping ${makefile_line}") + MATH(EXPR SkipIfs "${SkipIfs}-1") + endif () continue () endif () string(REGEX MATCH "else[ \t]*" line_match "${makefile_line}") - if (NOT "${line_match}" STREQUAL "") -# message(STATUS "ELSE ${makefile_line}") - set (ElseSeen 1) - continue () - endif() - if ( (${IfElse} EQUAL 2 AND ${ElseSeen} EQUAL 0) OR ( ${IfElse} EQUAL 1 AND ${ElseSeen} EQUAL 1)) -# message(STATUS "skipping ${makefile_line}") - continue () + if (NOT "${line_match}" STREQUAL "") + if (${SkipIfs} EQUAL 0) + #message(STATUS "ELSE ${makefile_line}") + set (ElseSeen 1) + else () + #message(STATUS "skipping ${makefile_line}") + endif () + continue () + endif() + # Skip the lines that are not part of the path that has to be taken. + if ((${IfElse} EQUAL 2 AND ${ElseSeen} EQUAL 0) OR (${IfElse} EQUAL 1 AND ${ElseSeen} EQUAL 1) OR (${SkipIfs} GREATER 0)) + #message(STATUS "skipping ${makefile_line}") + continue () endif () - endif () + endif () + # Skip commented lines (the ones that start with '#') + string(REGEX MATCH "[ \t]*\\#.*$" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + #message(STATUS "skipping ${makefile_line}") + continue () + endif () string(REGEX MATCH "([0-9_a-zA-Z]+)[ \t]*=[ \t]*(.+)$" line_match "${makefile_line}") if (NOT "${line_match}" STREQUAL "") -#message(STATUS "match on ${line_match}") + #message(STATUS "match on ${line_match}") set(var_name ${CMAKE_MATCH_1}) -# set(var_value ${CMAKE_MATCH_2}) + #set(var_value ${CMAKE_MATCH_2}) string(STRIP ${CMAKE_MATCH_2} var_value) # check for Makefile variables in the string, e.g. $(TSUFFIX) string(REGEX MATCHALL "\\$\\(([0-9_a-zA-Z]+)\\)" make_var_matches ${var_value}) @@ -54,39 +102,93 @@ macro(ParseMakefileVars MAKEFILE_IN) string(REPLACE "$(${make_var})" "${${make_var}}" var_value ${var_value}) endforeach () set(${var_name} ${var_value}) - else () - string(REGEX MATCH "include \\$\\(KERNELDIR\\)/(.+)$" line_match "${makefile_line}") - if (NOT "${line_match}" STREQUAL "") -#message(STATUS "match on include ${line_match}") - ParseMakefileVars(${KERNELDIR}/${CMAKE_MATCH_1}) - else () -# message(STATUS "unmatched line ${line_match}") - string(REGEX MATCH "ifeq \\(\\$\\(([_A-Z]+)\\),[ \t]*([0-9_A-Z]+)\\)" line_match "${makefile_line}") - if (NOT "${line_match}" STREQUAL "") -# message(STATUS "IFEQ: ${line_match} first: ${CMAKE_MATCH_1} second: ${CMAKE_MATCH_2}") - if (DEFINED ${${CMAKE_MATCH_1}} AND ${${CMAKE_MATCH_1}} STREQUAL ${CMAKE_MATCH_2}) -# message (STATUS "condition is true") - set (IfElse 1) - else () - set (IfElse 2) - endif () + continue () + endif () + # Include a new file to be parsed + string(REGEX MATCH "include \\$\\(KERNELDIR\\)/(.+)$" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + #message(STATUS "match on include ${line_match}") + ParseMakefileVars(${KERNELDIR}/${CMAKE_MATCH_1}) + continue () + endif () + # The if statement that precedes this else has the path taken + # Thus, this else statement has to be skipped. + string(REGEX MATCH "else[ \t]*" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + #message(STATUS "skipping ${makefile_line}") + set (SkipElse 1) + continue() + endif() + # Example 1: ifdef HAVE_MSA + # Example 2: ifndef ZNRM2KERNEL + string(REGEX MATCH "(ifdef|ifndef) ([0-9_A-Z]+)" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + #message(STATUS "${CMAKE_MATCH_1} first: ${CMAKE_MATCH_2}") + set (ElseSeen 0) + if (DEFINED ${CMAKE_MATCH_2}) + if (${CMAKE_MATCH_1} STREQUAL "ifdef") + #message (STATUS "condition is true") + set (IfElse 1) else () - string(REGEX MATCH "ifneq \\(\\$\\(([_A-Z]+)\\),[ \t]*([0-9_A-Z]+)\\)" line_match "${makefile_line}") - if (NOT "${line_match}" STREQUAL "") -# message(STATUS "IFNEQ: ${line_match} first: ${CMAKE_MATCH_1} second: ${CMAKE_MATCH_2}") - if ( ${CMAKE_MATCH_1} STREQUAL C_COMPILER) - set (CMAKE_MATCH_1 CMAKE_C_COMPILER) - endif () - if (NOT ( ${${CMAKE_MATCH_1}} STREQUAL ${CMAKE_MATCH_2})) -# message (STATUS "condition is true") - set (IfElse 1) - else () - set (IfElse 2) - endif () - endif () + set (IfElse 2) + endif () + else () + if (${CMAKE_MATCH_1} STREQUAL "ifdef") + set (IfElse 2) + else () + #message (STATUS "condition is true") + set (IfElse 1) endif () endif () + continue () endif () + # Example 1: ifeq ($(SGEMM_UNROLL_M), 16) + # Example 2: ifeq ($(SGEMM_UNROLL_M)x$(SGEMM_UNROLL_N), 8x8) + # Example 3: ifeq ($(__BYTE_ORDER__)$(ELF_VERSION),__ORDER_BIG_ENDIAN__2) + # Ignore the second group since (?:...) does not work on cmake + string(REGEX MATCH "ifeq \\(\\$\\(([0-9_A-Z]+)\\)(([0-9_A-Za-z]*)\\$\\(([0-9_A-Z]+)\\))?,[ \t]*([0-9_A-Za-z]+)\\)" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + #message(STATUS "IFEQ: ${line_match} first: ${CMAKE_MATCH_1} second: ${CMAKE_MATCH_3} third: ${CMAKE_MATCH_4} fourth: ${CMAKE_MATCH_5}") + if (DEFINED ${CMAKE_MATCH_1}) + if (DEFINED ${CMAKE_MATCH_4}) + set (STR ${${CMAKE_MATCH_1}}${CMAKE_MATCH_3}${${CMAKE_MATCH_4}}) + else () + set (STR ${${CMAKE_MATCH_1}}) + endif () + if (${STR} STREQUAL ${CMAKE_MATCH_5}) + #message (STATUS "condition is true") + set (IfElse 1) + continue () + endif () + endif () + set (IfElse 2) + continue () + endif () + # Example 1 (Group 3): ifneq ($(SGEMM_UNROLL_M), $(SGEMM_UNROLL_N)) + # Example 2 (Group 4): ifneq ($(C_COMPILER), PGI) + string(REGEX MATCH "ifneq \\(\\$\\(([0-9_A-Z]+)\\),[ \t]*(\\$\\(([0-9_A-Z]+)\\)|([0-9_A-Z]+))\\)" line_match "${makefile_line}") + if (NOT "${line_match}" STREQUAL "") + #message(STATUS "IFNEQ: ${line_match} first: ${CMAKE_MATCH_1} second: ${CMAKE_MATCH_3} third: ${CMAKE_MATCH_4}") + set (ElseSeen 0) + set (HasValidGroup 0) + if (DEFINED ${CMAKE_MATCH_3}) + set (HasValidGroup 1) + set (STR ${${CMAKE_MATCH_3}}) + elseif (NOT ${CMAKE_MATCH_4} STREQUAL "") + set (HasValidGroup 1) + set (STR ${CMAKE_MATCH_4}) + endif () + if (DEFINED ${CMAKE_MATCH_1} AND ${HasValidGroup} EQUAL 1) + if (NOT (${${CMAKE_MATCH_1}} STREQUAL ${STR})) + #message (STATUS "condition is true") + set (IfElse 1) + continue () + endif () + endif () + set (IfElse 2) + continue () + endif () + #message(STATUS "unmatched line ${line_match}") endforeach () endmacro () From d5c9353f1bcf733fb666d1788d061c3f5107d5d5 Mon Sep 17 00:00:00 2001 From: Rafael Cardoso Fernandes Sousa Date: Wed, 24 Nov 2021 20:07:20 -0600 Subject: [PATCH 2/2] Modify the order that cmake set the KERNEL variables (generic now is fallback) --- cmake/kernel.cmake | 396 +++++++++++++++++++++--------------------- kernel/CMakeLists.txt | 4 +- 2 files changed, 202 insertions(+), 198 deletions(-) diff --git a/cmake/kernel.cmake b/cmake/kernel.cmake index 09ca5eb57..efededcf3 100644 --- a/cmake/kernel.cmake +++ b/cmake/kernel.cmake @@ -1,214 +1,218 @@ # helper functions for the kernel CMakeLists.txt +function(SetFallback KERNEL SOURCE_PATH) + if (NOT (DEFINED ${KERNEL})) + set(${KERNEL} ${SOURCE_PATH} PARENT_SCOPE) + endif () +endfunction() -# Set the default filenames for L1 objects. Most of these will be overridden by the appropriate KERNEL file. macro(SetDefaultL1) - set(SAMAXKERNEL amax.S) - set(DAMAXKERNEL amax.S) - set(QAMAXKERNEL amax.S) - set(CAMAXKERNEL zamax.S) - set(ZAMAXKERNEL zamax.S) - set(XAMAXKERNEL zamax.S) - set(SAMINKERNEL amin.S) - set(DAMINKERNEL amin.S) - set(QAMINKERNEL amin.S) - set(CAMINKERNEL zamin.S) - set(ZAMINKERNEL zamin.S) - set(XAMINKERNEL zamin.S) - set(SMAXKERNEL max.S) - set(DMAXKERNEL max.S) - set(QMAXKERNEL max.S) - set(SMINKERNEL min.S) - set(DMINKERNEL min.S) - set(QMINKERNEL min.S) - set(ISAMAXKERNEL iamax.S) - set(IDAMAXKERNEL iamax.S) - set(IQAMAXKERNEL iamax.S) - set(ICAMAXKERNEL izamax.S) - set(IZAMAXKERNEL izamax.S) - set(IXAMAXKERNEL izamax.S) - set(ISAMINKERNEL iamin.S) - set(IDAMINKERNEL iamin.S) - set(IQAMINKERNEL iamin.S) - set(ICAMINKERNEL izamin.S) - set(IZAMINKERNEL izamin.S) - set(IXAMINKERNEL izamin.S) - set(ISMAXKERNEL iamax.S) - set(IDMAXKERNEL iamax.S) - set(IQMAXKERNEL iamax.S) - set(ISMINKERNEL iamin.S) - set(IDMINKERNEL iamin.S) - set(IQMINKERNEL iamin.S) - set(SASUMKERNEL asum.S) - set(DASUMKERNEL asum.S) - set(CASUMKERNEL zasum.S) - set(ZASUMKERNEL zasum.S) - set(QASUMKERNEL asum.S) - set(XASUMKERNEL zasum.S) - set(SAXPYKERNEL axpy.S) - set(DAXPYKERNEL axpy.S) - set(CAXPYKERNEL zaxpy.S) - set(ZAXPYKERNEL zaxpy.S) - set(QAXPYKERNEL axpy.S) - set(XAXPYKERNEL zaxpy.S) - set(SCOPYKERNEL copy.S) - set(DCOPYKERNEL copy.S) - set(CCOPYKERNEL zcopy.S) - set(ZCOPYKERNEL zcopy.S) - set(QCOPYKERNEL copy.S) - set(XCOPYKERNEL zcopy.S) - set(SDOTKERNEL dot.S) - set(DDOTKERNEL dot.S) - set(CDOTKERNEL zdot.S) - set(ZDOTKERNEL zdot.S) - set(QDOTKERNEL dot.S) - set(XDOTKERNEL zdot.S) - set(SNRM2KERNEL nrm2.S) - set(DNRM2KERNEL nrm2.S) - set(QNRM2KERNEL nrm2.S) - set(CNRM2KERNEL znrm2.S) - set(ZNRM2KERNEL znrm2.S) - set(XNRM2KERNEL znrm2.S) - set(SROTKERNEL rot.S) - set(DROTKERNEL rot.S) - set(QROTKERNEL rot.S) - set(CROTKERNEL zrot.S) - set(ZROTKERNEL zrot.S) - set(XROTKERNEL zrot.S) - set(SSCALKERNEL scal.S) - set(DSCALKERNEL scal.S) - set(CSCALKERNEL zscal.S) - set(ZSCALKERNEL zscal.S) - set(QSCALKERNEL scal.S) - set(XSCALKERNEL zscal.S) - set(SSWAPKERNEL swap.S) - set(DSWAPKERNEL swap.S) - set(CSWAPKERNEL zswap.S) - set(ZSWAPKERNEL zswap.S) - set(QSWAPKERNEL swap.S) - set(XSWAPKERNEL zswap.S) - set(SGEMVNKERNEL gemv_n.S) - set(SGEMVTKERNEL gemv_t.S) - set(DGEMVNKERNEL gemv_n.S) - set(DGEMVTKERNEL gemv_t.S) - set(CGEMVNKERNEL zgemv_n.S) - set(CGEMVTKERNEL zgemv_t.S) - set(ZGEMVNKERNEL zgemv_n.S) - set(ZGEMVTKERNEL zgemv_t.S) - set(QGEMVNKERNEL gemv_n.S) - set(QGEMVTKERNEL gemv_t.S) - set(XGEMVNKERNEL zgemv_n.S) - set(XGEMVTKERNEL zgemv_t.S) - set(SCABS_KERNEL ../generic/cabs.c) - set(DCABS_KERNEL ../generic/cabs.c) - set(QCABS_KERNEL ../generic/cabs.c) - set(LSAME_KERNEL ../generic/lsame.c) - set(SAXPBYKERNEL ../arm/axpby.c) - set(DAXPBYKERNEL ../arm/axpby.c) - set(CAXPBYKERNEL ../arm/zaxpby.c) - set(ZAXPBYKERNEL ../arm/zaxpby.c) - set(SSUMKERNEL sum.S) - set(DSUMKERNEL sum.S) - set(CSUMKERNEL zsum.S) - set(ZSUMKERNEL zsum.S) - set(QSUMKERNEL sum.S) - set(XSUMKERNEL zsum.S) + SetFallback(SAMAXKERNEL amax.S) + SetFallback(DAMAXKERNEL amax.S) + SetFallback(QAMAXKERNEL amax.S) + SetFallback(CAMAXKERNEL zamax.S) + SetFallback(ZAMAXKERNEL zamax.S) + SetFallback(XAMAXKERNEL zamax.S) + SetFallback(SAMINKERNEL amin.S) + SetFallback(DAMINKERNEL amin.S) + SetFallback(QAMINKERNEL amin.S) + SetFallback(CAMINKERNEL zamin.S) + SetFallback(ZAMINKERNEL zamin.S) + SetFallback(XAMINKERNEL zamin.S) + SetFallback(SMAXKERNEL max.S) + SetFallback(DMAXKERNEL max.S) + SetFallback(QMAXKERNEL max.S) + SetFallback(SMINKERNEL min.S) + SetFallback(DMINKERNEL min.S) + SetFallback(QMINKERNEL min.S) + SetFallback(ISAMAXKERNEL iamax.S) + SetFallback(IDAMAXKERNEL iamax.S) + SetFallback(IQAMAXKERNEL iamax.S) + SetFallback(ICAMAXKERNEL izamax.S) + SetFallback(IZAMAXKERNEL izamax.S) + SetFallback(IXAMAXKERNEL izamax.S) + SetFallback(ISAMINKERNEL iamin.S) + SetFallback(IDAMINKERNEL iamin.S) + SetFallback(IQAMINKERNEL iamin.S) + SetFallback(ICAMINKERNEL izamin.S) + SetFallback(IZAMINKERNEL izamin.S) + SetFallback(IXAMINKERNEL izamin.S) + SetFallback(ISMAXKERNEL iamax.S) + SetFallback(IDMAXKERNEL iamax.S) + SetFallback(IQMAXKERNEL iamax.S) + SetFallback(ISMINKERNEL iamin.S) + SetFallback(IDMINKERNEL iamin.S) + SetFallback(IQMINKERNEL iamin.S) + SetFallback(SASUMKERNEL asum.S) + SetFallback(DASUMKERNEL asum.S) + SetFallback(CASUMKERNEL zasum.S) + SetFallback(ZASUMKERNEL zasum.S) + SetFallback(QASUMKERNEL asum.S) + SetFallback(XASUMKERNEL zasum.S) + SetFallback(SAXPYKERNEL axpy.S) + SetFallback(DAXPYKERNEL axpy.S) + SetFallback(CAXPYKERNEL zaxpy.S) + SetFallback(ZAXPYKERNEL zaxpy.S) + SetFallback(QAXPYKERNEL axpy.S) + SetFallback(XAXPYKERNEL zaxpy.S) + SetFallback(SCOPYKERNEL copy.S) + SetFallback(DCOPYKERNEL copy.S) + SetFallback(CCOPYKERNEL zcopy.S) + SetFallback(ZCOPYKERNEL zcopy.S) + SetFallback(QCOPYKERNEL copy.S) + SetFallback(XCOPYKERNEL zcopy.S) + SetFallback(SDOTKERNEL dot.S) + SetFallback(DDOTKERNEL dot.S) + SetFallback(CDOTKERNEL zdot.S) + SetFallback(ZDOTKERNEL zdot.S) + SetFallback(QDOTKERNEL dot.S) + SetFallback(XDOTKERNEL zdot.S) + SetFallback(SNRM2KERNEL nrm2.S) + SetFallback(DNRM2KERNEL nrm2.S) + SetFallback(QNRM2KERNEL nrm2.S) + SetFallback(CNRM2KERNEL znrm2.S) + SetFallback(ZNRM2KERNEL znrm2.S) + SetFallback(XNRM2KERNEL znrm2.S) + SetFallback(SROTKERNEL rot.S) + SetFallback(DROTKERNEL rot.S) + SetFallback(QROTKERNEL rot.S) + SetFallback(CROTKERNEL zrot.S) + SetFallback(ZROTKERNEL zrot.S) + SetFallback(XROTKERNEL zrot.S) + SetFallback(SSCALKERNEL scal.S) + SetFallback(DSCALKERNEL scal.S) + SetFallback(CSCALKERNEL zscal.S) + SetFallback(ZSCALKERNEL zscal.S) + SetFallback(QSCALKERNEL scal.S) + SetFallback(XSCALKERNEL zscal.S) + SetFallback(SSWAPKERNEL swap.S) + SetFallback(DSWAPKERNEL swap.S) + SetFallback(CSWAPKERNEL zswap.S) + SetFallback(ZSWAPKERNEL zswap.S) + SetFallback(QSWAPKERNEL swap.S) + SetFallback(XSWAPKERNEL zswap.S) + SetFallback(SGEMVNKERNEL gemv_n.S) + SetFallback(SGEMVTKERNEL gemv_t.S) + SetFallback(DGEMVNKERNEL gemv_n.S) + SetFallback(DGEMVTKERNEL gemv_t.S) + SetFallback(CGEMVNKERNEL zgemv_n.S) + SetFallback(CGEMVTKERNEL zgemv_t.S) + SetFallback(ZGEMVNKERNEL zgemv_n.S) + SetFallback(ZGEMVTKERNEL zgemv_t.S) + SetFallback(QGEMVNKERNEL gemv_n.S) + SetFallback(QGEMVTKERNEL gemv_t.S) + SetFallback(XGEMVNKERNEL zgemv_n.S) + SetFallback(XGEMVTKERNEL zgemv_t.S) + SetFallback(SCABS_KERNEL ../generic/cabs.c) + SetFallback(DCABS_KERNEL ../generic/cabs.c) + SetFallback(QCABS_KERNEL ../generic/cabs.c) + SetFallback(LSAME_KERNEL ../generic/lsame.c) + SetFallback(SAXPBYKERNEL ../arm/axpby.c) + SetFallback(DAXPBYKERNEL ../arm/axpby.c) + SetFallback(CAXPBYKERNEL ../arm/zaxpby.c) + SetFallback(ZAXPBYKERNEL ../arm/zaxpby.c) + SetFallback(SSUMKERNEL sum.S) + SetFallback(DSUMKERNEL sum.S) + SetFallback(CSUMKERNEL zsum.S) + SetFallback(ZSUMKERNEL zsum.S) + SetFallback(QSUMKERNEL sum.S) + SetFallback(XSUMKERNEL zsum.S) if (BUILD_BFLOAT16) - set(SHAMINKERNEL ../arm/amin.c) - set(SHAMAXKERNEL ../arm/amax.c) - set(SHMAXKERNEL ../arm/max.c) - set(SHMINKERNEL ../arm/min.c) - set(ISHAMAXKERNEL ../arm/iamax.c) - set(ISHAMINKERNEL ../arm/iamin.c) - set(ISHMAXKERNEL ../arm/imax.c) - set(ISHMINKERNEL ../arm/imin.c) - set(SHASUMKERNEL ../arm/asum.c) - set(SHAXPYKERNEL ../arm/axpy.c) - set(SHAXPBYKERNEL ../arm/axpby.c) - set(SHCOPYKERNEL ../arm/copy.c) - set(SBDOTKERNEL ../x86_64/sbdot.c) - set(SHROTKERNEL ../arm/rot.c) - set(SHSCALKERNEL ../arm/scal.c) - set(SHNRM2KERNEL ../arm/nrm2.c) - set(SHSUMKERNEL ../arm/sum.c) - set(SHSWAPKERNEL ../arm/swap.c) - set(TOBF16KERNEL ../x86_64/tobf16.c) - set(BF16TOKERNEL ../x86_64/bf16to.c) - set(SBGEMVNKERNEL ../x86_64/sbgemv_n.c) - set(SBGEMVTKERNEL ../x86_64/sbgemv_t.c) + SetFallback(SHAMINKERNEL ../arm/amin.c) + SetFallback(SHAMAXKERNEL ../arm/amax.c) + SetFallback(SHMAXKERNEL ../arm/max.c) + SetFallback(SHMINKERNEL ../arm/min.c) + SetFallback(ISHAMAXKERNEL ../arm/iamax.c) + SetFallback(ISHAMINKERNEL ../arm/iamin.c) + SetFallback(ISHMAXKERNEL ../arm/imax.c) + SetFallback(ISHMINKERNEL ../arm/imin.c) + SetFallback(SHASUMKERNEL ../arm/asum.c) + SetFallback(SHAXPYKERNEL ../arm/axpy.c) + SetFallback(SHAXPBYKERNEL ../arm/axpby.c) + SetFallback(SHCOPYKERNEL ../arm/copy.c) + SetFallback(SBDOTKERNEL ../x86_64/sbdot.c) + SetFallback(SHROTKERNEL ../arm/rot.c) + SetFallback(SHSCALKERNEL ../arm/scal.c) + SetFallback(SHNRM2KERNEL ../arm/nrm2.c) + SetFallback(SHSUMKERNEL ../arm/sum.c) + SetFallback(SHSWAPKERNEL ../arm/swap.c) + SetFallback(TOBF16KERNEL ../x86_64/tobf16.c) + SetFallback(BF16TOKERNEL ../x86_64/bf16to.c) + SetFallback(SBGEMVNKERNEL ../x86_64/sbgemv_n.c) + SetFallback(SBGEMVTKERNEL ../x86_64/sbgemv_t.c) endif () endmacro () macro(SetDefaultL2) - set(SGEMVNKERNEL ../arm/gemv_n.c) - set(SGEMVTKERNEL ../arm/gemv_t.c) - set(DGEMVNKERNEL gemv_n.S) - set(DGEMVTKERNEL gemv_t.S) - set(CGEMVNKERNEL zgemv_n.S) - set(CGEMVTKERNEL zgemv_t.S) - set(ZGEMVNKERNEL zgemv_n.S) - set(ZGEMVTKERNEL zgemv_t.S) - set(QGEMVNKERNEL gemv_n.S) - set(QGEMVTKERNEL gemv_t.S) - set(XGEMVNKERNEL zgemv_n.S) - set(XGEMVTKERNEL zgemv_t.S) - set(SGERKERNEL ../generic/ger.c) - set(DGERKERNEL ../generic/ger.c) - set(QGERKERNEL ../generic/ger.c) - set(CGERUKERNEL ../generic/zger.c) - set(CGERCKERNEL ../generic/zger.c) - set(ZGERUKERNEL ../generic/zger.c) - set(ZGERCKERNEL ../generic/zger.c) - set(XGERUKERNEL ../generic/zger.c) - set(XGERCKERNEL ../generic/zger.c) - set(SSYMV_U_KERNEL ../generic/symv_k.c) - set(SSYMV_L_KERNEL ../generic/symv_k.c) - set(DSYMV_U_KERNEL ../generic/symv_k.c) - set(DSYMV_L_KERNEL ../generic/symv_k.c) - set(QSYMV_U_KERNEL ../generic/symv_k.c) - set(QSYMV_L_KERNEL ../generic/symv_k.c) - set(CSYMV_U_KERNEL ../generic/zsymv_k.c) - set(CSYMV_L_KERNEL ../generic/zsymv_k.c) - set(ZSYMV_U_KERNEL ../generic/zsymv_k.c) - set(ZSYMV_L_KERNEL ../generic/zsymv_k.c) - set(XSYMV_U_KERNEL ../generic/zsymv_k.c) - set(XSYMV_L_KERNEL ../generic/zsymv_k.c) - set(CHEMV_U_KERNEL ../generic/zhemv_k.c) - set(CHEMV_L_KERNEL ../generic/zhemv_k.c) - set(CHEMV_V_KERNEL ../generic/zhemv_k.c) - set(CHEMV_M_KERNEL ../generic/zhemv_k.c) - set(ZHEMV_U_KERNEL ../generic/zhemv_k.c) - set(ZHEMV_L_KERNEL ../generic/zhemv_k.c) - set(ZHEMV_V_KERNEL ../generic/zhemv_k.c) - set(ZHEMV_M_KERNEL ../generic/zhemv_k.c) - set(XHEMV_U_KERNEL ../generic/zhemv_k.c) - set(XHEMV_L_KERNEL ../generic/zhemv_k.c) - set(XHEMV_V_KERNEL ../generic/zhemv_k.c) - set(XHEMV_M_KERNEL ../generic/zhemv_k.c) + SetFallback(SGEMVNKERNEL ../arm/gemv_n.c) + SetFallback(SGEMVTKERNEL ../arm/gemv_t.c) + SetFallback(DGEMVNKERNEL gemv_n.S) + SetFallback(DGEMVTKERNEL gemv_t.S) + SetFallback(CGEMVNKERNEL zgemv_n.S) + SetFallback(CGEMVTKERNEL zgemv_t.S) + SetFallback(ZGEMVNKERNEL zgemv_n.S) + SetFallback(ZGEMVTKERNEL zgemv_t.S) + SetFallback(QGEMVNKERNEL gemv_n.S) + SetFallback(QGEMVTKERNEL gemv_t.S) + SetFallback(XGEMVNKERNEL zgemv_n.S) + SetFallback(XGEMVTKERNEL zgemv_t.S) + SetFallback(SGERKERNEL ../generic/ger.c) + SetFallback(DGERKERNEL ../generic/ger.c) + SetFallback(QGERKERNEL ../generic/ger.c) + SetFallback(CGERUKERNEL ../generic/zger.c) + SetFallback(CGERCKERNEL ../generic/zger.c) + SetFallback(ZGERUKERNEL ../generic/zger.c) + SetFallback(ZGERCKERNEL ../generic/zger.c) + SetFallback(XGERUKERNEL ../generic/zger.c) + SetFallback(XGERCKERNEL ../generic/zger.c) + SetFallback(SSYMV_U_KERNEL ../generic/symv_k.c) + SetFallback(SSYMV_L_KERNEL ../generic/symv_k.c) + SetFallback(DSYMV_U_KERNEL ../generic/symv_k.c) + SetFallback(DSYMV_L_KERNEL ../generic/symv_k.c) + SetFallback(QSYMV_U_KERNEL ../generic/symv_k.c) + SetFallback(QSYMV_L_KERNEL ../generic/symv_k.c) + SetFallback(CSYMV_U_KERNEL ../generic/zsymv_k.c) + SetFallback(CSYMV_L_KERNEL ../generic/zsymv_k.c) + SetFallback(ZSYMV_U_KERNEL ../generic/zsymv_k.c) + SetFallback(ZSYMV_L_KERNEL ../generic/zsymv_k.c) + SetFallback(XSYMV_U_KERNEL ../generic/zsymv_k.c) + SetFallback(XSYMV_L_KERNEL ../generic/zsymv_k.c) + SetFallback(CHEMV_U_KERNEL ../generic/zhemv_k.c) + SetFallback(CHEMV_L_KERNEL ../generic/zhemv_k.c) + SetFallback(CHEMV_V_KERNEL ../generic/zhemv_k.c) + SetFallback(CHEMV_M_KERNEL ../generic/zhemv_k.c) + SetFallback(ZHEMV_U_KERNEL ../generic/zhemv_k.c) + SetFallback(ZHEMV_L_KERNEL ../generic/zhemv_k.c) + SetFallback(ZHEMV_V_KERNEL ../generic/zhemv_k.c) + SetFallback(ZHEMV_M_KERNEL ../generic/zhemv_k.c) + SetFallback(XHEMV_U_KERNEL ../generic/zhemv_k.c) + SetFallback(XHEMV_L_KERNEL ../generic/zhemv_k.c) + SetFallback(XHEMV_V_KERNEL ../generic/zhemv_k.c) + SetFallback(XHEMV_M_KERNEL ../generic/zhemv_k.c) if (BUILD_BFLOAT16) - set(SBGEMVNKERNEL ../x86_64/sbgemv_n.c) - set(SBGEMVTKERNEL ../x86_64/sbgemv_t.c) - set(SHGERKERNEL ../generic/ger.c) + SetFallback(SBGEMVNKERNEL ../x86_64/sbgemv_n.c) + SetFallback(SBGEMVTKERNEL ../x86_64/sbgemv_t.c) + SetFallback(SHGERKERNEL ../generic/ger.c) endif () endmacro () macro(SetDefaultL3) - set(SGEADD_KERNEL ../generic/geadd.c) - set(DGEADD_KERNEL ../generic/geadd.c) - set(CGEADD_KERNEL ../generic/zgeadd.c) - set(ZGEADD_KERNEL ../generic/zgeadd.c) + SetFallback(SGEADD_KERNEL ../generic/geadd.c) + SetFallback(DGEADD_KERNEL ../generic/geadd.c) + SetFallback(CGEADD_KERNEL ../generic/zgeadd.c) + SetFallback(ZGEADD_KERNEL ../generic/zgeadd.c) if (BUILD_BFLOAT16) - set(SHGEADD_KERNEL ../generic/geadd.c) - set(SBGEMMKERNEL ../generic/gemmkernel_2x2.c) - set(SBGEMM_BETA ../generic/gemm_beta.c) - set(SBGEMMINCOPY ../generic/gemm_ncopy_2.c) - set(SBGEMMITCOPY ../generic/gemm_tcopy_2.c) - set(SBGEMMONCOPY ../generic/gemm_ncopy_2.c) - set(SBGEMMOTCOPY ../generic/gemm_tcopy_2.c) - set(SBGEMMINCOPYOBJ sbgemm_incopy.o) - set(SBGEMMITCOPYOBJ sbgemm_itcopy.o) - set(SBGEMMONCOPYOBJ sbgemm_oncopy.o) - set(SBGEMMOTCOPYOBJ sbgemm_otcopy.o) + SetFallback(SHGEADD_KERNEL ../generic/geadd.c) + SetFallback(SBGEMMKERNEL ../generic/gemmkernel_2x2.c) + SetFallback(SBGEMM_BETA ../generic/gemm_beta.c) + SetFallback(SBGEMMINCOPY ../generic/gemm_ncopy_2.c) + SetFallback(SBGEMMITCOPY ../generic/gemm_tcopy_2.c) + SetFallback(SBGEMMONCOPY ../generic/gemm_ncopy_2.c) + SetFallback(SBGEMMOTCOPY ../generic/gemm_tcopy_2.c) + SetFallback(SBGEMMINCOPYOBJ sbgemm_incopy.o) + SetFallback(SBGEMMITCOPYOBJ sbgemm_itcopy.o) + SetFallback(SBGEMMONCOPYOBJ sbgemm_oncopy.o) + SetFallback(SBGEMMOTCOPYOBJ sbgemm_otcopy.o) endif () endmacro () diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 9c8460723..fb2c94fc7 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -9,11 +9,11 @@ function (build_core TARGET_CORE KDIR TSUFFIX KERNEL_DEFINITIONS) if (${DYNAMIC_ARCH}) include("${PROJECT_SOURCE_DIR}/cmake/system.cmake") endif () + ParseMakefileVars("${KERNELDIR}/KERNEL") + ParseMakefileVars("${KERNELDIR}/KERNEL.${TARGET_CORE}") SetDefaultL1() SetDefaultL2() SetDefaultL3() - ParseMakefileVars("${KERNELDIR}/KERNEL") - ParseMakefileVars("${KERNELDIR}/KERNEL.${TARGET_CORE}") set(KERNEL_INTERFACE common_level1.h common_level2.h common_level3.h) if(NOT NO_LAPACK)