| @@ -1,9 +1,5 @@ | |||||
| # Ordered As per https://netlib.org/blas/blasqr.pdf | # Ordered As per https://netlib.org/blas/blasqr.pdf | ||||
| # NOTE: xROTG xROTMG xROTM have no kernels? | # NOTE: xROTG xROTMG xROTM have no kernels? | ||||
| _kinds = [] | |||||
| _rk = ['s', 'd'] | |||||
| _ck = ['c', 'z'] | |||||
| _std_dk = _rk + _ck # Standard precisions | |||||
| # TODO: Actually test and set this | # TODO: Actually test and set this | ||||
| if true | if true | ||||
| fma3_flag = '-mfma' | fma3_flag = '-mfma' | ||||
| @@ -11,264 +7,394 @@ endif | |||||
| # TODO: This is currently following x86_64 generic for src and dir, but it needs | # TODO: This is currently following x86_64 generic for src and dir, but it needs | ||||
| # to diversify | # to diversify | ||||
| # NOTE: The def and undefs are from Makefile.L1 | # NOTE: The def and undefs are from Makefile.L1 | ||||
| # Construct all PRECsymbKERNEL from src and dir via files(dir + src) | |||||
| # For the precs array, the following mapping is used for c_args: | |||||
| # Construct all ModesymbKERNEL from src and dir via files(dir + src) | |||||
| # For the modes array, the following mapping is used for c_args: | |||||
| # addl --> passed AS IS | # addl --> passed AS IS | ||||
| base_kops = [ | base_kops = [ | ||||
| # Level 1 BLAS | # Level 1 BLAS | ||||
| { | { | ||||
| 'base': 'rot', | 'base': 'rot', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'rot.c', | 'kernel': 'rot.c', | ||||
| 'addl': [fma3_flag], | 'addl': [fma3_flag], | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'rot.c', | 'kernel': 'rot.c', | ||||
| 'addl': [fma3_flag], | 'addl': [fma3_flag], | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zrot.c', | 'kernel': 'zrot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'cs' : { | 'cs' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zrot.c', | 'kernel': 'zrot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'zd' : { | 'zd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zrot.c', | 'kernel': 'zrot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'xq' : { | 'xq' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zrot.c', | 'kernel': 'zrot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'swap', | {'base': 'swap', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'swap.c', | 'kernel': 'swap.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'swap.c', | 'kernel': 'swap.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zswap.c', | 'kernel': 'zswap.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zswap.c', | 'kernel': 'zswap.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zswap.c', | 'kernel': 'zswap.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zswap.c', | 'kernel': 'zswap.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'scal', | {'base': 'scal', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'scal.c', | 'kernel': 'scal.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'scal.c', | 'kernel': 'scal.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zscal.c', | 'kernel': 'zscal.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zscal.c', | 'kernel': 'zscal.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zscal.c', | 'kernel': 'zscal.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zscal.c', | 'kernel': 'zscal.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'copy', | {'base': 'copy', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'copy.c', | 'kernel': 'copy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'copy.c', | 'kernel': 'copy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zcopy.c', | 'kernel': 'zcopy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zcopy.c', | 'kernel': 'zcopy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zcopy.c', | 'kernel': 'zcopy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zcopy.c', | 'kernel': 'zcopy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'axpy', | {'base': 'axpy', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'axpy.c', | 'kernel': 'axpy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'axpy.c', | 'kernel': 'axpy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zaxpy.c', | 'kernel': 'zaxpy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zaxpy.c', | 'kernel': 'zaxpy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zaxpy.c', | 'kernel': 'zaxpy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zaxpy.c', | 'kernel': 'zaxpy.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'dot', | {'base': 'dot', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'dot.c', | 'kernel': 'dot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'dot.c', | 'kernel': 'dot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zdot.c', | 'kernel': 'zdot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zdot.c', | 'kernel': 'zdot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zdot.c', | 'kernel': 'zdot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zdot.c', | 'kernel': 'zdot.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| # xDOTU xDOTC xxDOT aren't present | # xDOTU xDOTC xxDOT aren't present | ||||
| {'base': 'nrm2', | {'base': 'nrm2', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'nrm2.c', | 'kernel': 'nrm2.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'nrm2.c', | 'kernel': 'nrm2.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'znrm2.c', | 'kernel': 'znrm2.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'znrm2.c', | 'kernel': 'znrm2.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'znrm2.c', | 'kernel': 'znrm2.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'znrm2.c', | 'kernel': 'znrm2.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'asum', | {'base': 'asum', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'asum.c', | 'kernel': 'asum.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'asum.c', | 'kernel': 'asum.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zasum.c', | 'kernel': 'zasum.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zasum.c', | 'kernel': 'zasum.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zasum.c', | 'kernel': 'zasum.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zasum.c', | 'kernel': 'zasum.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| {'base': 'amax', | {'base': 'amax', | ||||
| 'precs': { | |||||
| 'modes': { | |||||
| 's' : { | 's' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'amax.c', | 'kernel': 'amax.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'd' : { | 'd' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'amax.c', | 'kernel': 'amax.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'q' : { | 'q' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zamax.c', | 'kernel': 'zamax.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'c' : { | 'c' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zamax.c', | 'kernel': 'zamax.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'z' : { | 'z' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zamax.c', | 'kernel': 'zamax.c', | ||||
| 'exts': ['_k'], | |||||
| }, | }, | ||||
| 'x' : { | 'x' : { | ||||
| 'dir': 'arm', | 'dir': 'arm', | ||||
| 'kernel': 'zamax.c', | 'kernel': 'zamax.c', | ||||
| 'exts': ['_k'], | |||||
| }, | |||||
| }, | |||||
| }, | |||||
| # Level 2 BLAS | |||||
| # There are additional sources so now we have srcs | |||||
| # Ordered as per KERNEL.generic and Makefile.L2 | |||||
| # exts are used to find the flags for each modality | |||||
| # ext is attached to base (only useful from Level 2) | |||||
| # i.e. baseext (e.g., gemv_n, gemv_t, cgeru_k, cgerc_k) | |||||
| {'base': 'gemv', | |||||
| 'modes': { | |||||
| 's' : { | |||||
| 'dir': 'arm', | |||||
| 'kernel': 'gemv_n.c', | |||||
| 'exts': ['_n', '_t'], | |||||
| }, | |||||
| 'd' : { | |||||
| 'dir': 'arm', | |||||
| 'kernel': 'gemv_n.c', | |||||
| # TODO: _t should take fmaflag, but then we need a dictionary.. | |||||
| # From Makefile.L2 | |||||
| 'exts': ['_n', '_t'], | |||||
| }, | |||||
| 'q' : { | |||||
| 'dir': 'arm', | |||||
| 'kernel': 'zgemv_n.c', | |||||
| 'exts': ['_n', '_t'], | |||||
| }, | |||||
| 'c' : { | |||||
| 'dir': 'arm', | |||||
| 'kernel': 'zgemv_n.c', | |||||
| 'exts': ['_n', '_t', '_r', '_c', '_u', '_s', '_d'], | |||||
| }, | |||||
| 'z' : { | |||||
| 'dir': 'arm', | |||||
| 'kernel': 'zgemv_n.c', | |||||
| 'exts': ['_n', '_t', '_r', '_c', '_u', '_s', '_d'], | |||||
| }, | |||||
| 'x' : { | |||||
| 'dir': 'arm', | |||||
| 'kernel': 'zgemv_n.c', | |||||
| 'exts': ['_n', '_t', '_r', '_c', '_u', '_s', '_d'], | |||||
| }, | |||||
| }, | |||||
| }, | |||||
| {'base': 'gemm_beta', | |||||
| 'modes': { | |||||
| 's' : { | |||||
| 'dir': 'generic', | |||||
| 'kernel': 'gemm_beta.c', | |||||
| 'exts': ['_n', '_t'], | |||||
| }, | |||||
| 'd' : { | |||||
| 'dir': 'generic', | |||||
| 'kernel': 'gemm_beta.c', | |||||
| 'exts': ['_n', '_t'], | |||||
| }, | |||||
| 'q' : { | |||||
| 'dir': 'generic', | |||||
| 'kernel': 'zgemm_beta.c', | |||||
| 'exts': ['_n', '_t'], | |||||
| }, | |||||
| 'c' : { | |||||
| 'dir': 'generic', | |||||
| 'kernel': 'zgemm_beta.c', | |||||
| 'exts': ['_n', '_t', '_r', '_c', '_u', '_s', '_d'], | |||||
| }, | |||||
| 'z' : { | |||||
| 'dir': 'generic', | |||||
| 'kernel': 'zgemm_beta.c', | |||||
| 'exts': ['_n', '_t', '_r', '_c', '_u', '_s', '_d'], | |||||
| }, | |||||
| 'x' : { | |||||
| 'dir': 'generic', | |||||
| 'kernel': 'zgemm_beta.c', | |||||
| 'exts': ['_n', '_t', '_r', '_c', '_u', '_s', '_d'], | |||||
| }, | }, | ||||
| }, | }, | ||||
| }, | }, | ||||
| @@ -276,52 +402,341 @@ base_kops = [ | |||||
| kernel_confs = [] | kernel_confs = [] | ||||
| # For the precs array, the following mapping is used for c_args: | |||||
| # For the modes array, the following mapping is used for c_args: | |||||
| # undef --> -Uwhatever | # undef --> -Uwhatever | ||||
| # def --> -Dwhatever | # def --> -Dwhatever | ||||
| foreach _kop : base_kops | foreach _kop : base_kops | ||||
| foreach pkey, pval : _kop['precs'] | |||||
| foreach pkey, pval : _kop['modes'] | |||||
| # TODO: This srcs should be in files() after this is ready | |||||
| # dictionaries with files can't be printed with message | |||||
| kcfg = { | kcfg = { | ||||
| 'name': pkey + _kop['base'] + '_k', | |||||
| # TODO: This should probably be in files() after this is ready | |||||
| # dictionaries with files can't be printed with message | |||||
| 'src': pval['dir'] + '/' + pval['kernel'], | 'src': pval['dir'] + '/' + pval['kernel'], | ||||
| } | } | ||||
| if pval.has_key('addl') | if pval.has_key('addl') | ||||
| kcfg += {'addl': pval['addl']} | kcfg += {'addl': pval['addl']} | ||||
| endif | endif | ||||
| if 's' == pkey | if 's' == pkey | ||||
| kcfg += {'undef': ['COMPLEX', 'DOUBLE']} | |||||
| foreach ext : pval['exts'] | |||||
| kcfg += {'name': pkey + _kop['base'] + ext} | |||||
| # Level 1 | |||||
| if '_k' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX', 'DOUBLE'] | |||||
| } | |||||
| endif | |||||
| # Level 2 | |||||
| if '_n' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'COMPLEX', 'TRANS'], | |||||
| } | |||||
| endif | |||||
| if '_t' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'COMPLEX'], | |||||
| 'def': ['TRANS'] | |||||
| } | |||||
| endif | |||||
| if '_U' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'COMPLEX', 'LOWER'], | |||||
| } | |||||
| endif | |||||
| if '_L' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'COMPLEX'], | |||||
| 'def': ['LOWER'] | |||||
| } | |||||
| endif | |||||
| endforeach | |||||
| endif | endif | ||||
| if 'd' == pkey | if 'd' == pkey | ||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['DOUBLE'], | |||||
| } | |||||
| foreach ext : pval['exts'] | |||||
| kcfg += {'name': pkey + _kop['base'] + ext} | |||||
| # Level 1 | |||||
| if '_k' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['DOUBLE'], | |||||
| } | |||||
| endif | |||||
| # Level 2 | |||||
| if '_n' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX', 'TRANS'], | |||||
| 'def': ['DOUBLE'] | |||||
| } | |||||
| endif | |||||
| if '_t' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['DOUBLE', 'TRANS'] | |||||
| } | |||||
| endif | |||||
| if '_U' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX', 'LOWER'], | |||||
| 'def': ['DOUBLE'] | |||||
| } | |||||
| endif | |||||
| if '_L' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['DOUBLE', 'LOWER'] | |||||
| } | |||||
| endif | |||||
| endforeach | |||||
| endif | endif | ||||
| if 'q' == pkey | if 'q' == pkey | ||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['DXDOUBLE'], | |||||
| } | |||||
| foreach ext : pval['exts'] | |||||
| kcfg += {'name': pkey + _kop['base'] + ext} | |||||
| # Level 1 | |||||
| if '_k' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['XDOUBLE'], | |||||
| } | |||||
| endif | |||||
| # Level 2 | |||||
| if '_n' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX', 'TRANS'], | |||||
| 'def': ['XDOUBLE'] | |||||
| } | |||||
| endif | |||||
| if '_t' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['XDOUBLE', 'TRANS'] | |||||
| } | |||||
| endif | |||||
| if '_U' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX', 'LOWER'], | |||||
| 'def': ['XDOUBLE'] | |||||
| } | |||||
| endif | |||||
| if '_L' == ext | |||||
| kcfg += { | |||||
| 'undef': ['COMPLEX'], | |||||
| 'def': ['XDOUBLE', 'LOWER'] | |||||
| } | |||||
| endif | |||||
| endforeach | |||||
| endif | endif | ||||
| # TODO: rot is nonstandard in this instance, taking cs zd xq | # TODO: rot is nonstandard in this instance, taking cs zd xq | ||||
| # The others (scal, swap) take c z x, so we need to use in | # The others (scal, swap) take c z x, so we need to use in | ||||
| if 'c' in pkey | if 'c' in pkey | ||||
| kcfg += { | |||||
| 'undef': ['DOUBLE'], | |||||
| 'def': ['COMPLEX'], | |||||
| } | |||||
| foreach ext : pval['exts'] | |||||
| kcfg += {'name': pkey + _kop['base'] + ext} | |||||
| # Level 1 | |||||
| if '_k' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE'], | |||||
| 'def': ['COMPLEX'], | |||||
| } | |||||
| endif | |||||
| # Level 2 | |||||
| if '_n' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'TRANS', 'CONJ', 'XCONJ'], | |||||
| 'def': ['COMPLEX'] | |||||
| } | |||||
| endif | |||||
| if '_t' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'CONJ', 'XCONJ'], | |||||
| 'def': ['COMPLEX', 'TRANS'] | |||||
| } | |||||
| endif | |||||
| if '_r' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'TRANS', 'XCONJ'], | |||||
| 'def': ['COMPLEX', 'CONJ'] | |||||
| } | |||||
| endif | |||||
| if '_c' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'XCONJ'], | |||||
| 'def': ['COMPLEX', 'TRANS', 'CONJ'] | |||||
| } | |||||
| endif | |||||
| if '_o' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'TRANS', 'CONJ'], | |||||
| 'def': ['COMPLEX', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_u' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'CONJ'], | |||||
| 'def': ['COMPLEX', 'TRANS', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_s' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'TRANS'], | |||||
| 'def': ['COMPLEX', 'CONJ', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_d' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE'], | |||||
| 'def': ['COMPLEX', 'TRANS', 'CONJ', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_U' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE', 'LOWER'], | |||||
| 'def': ['COMPLEX'] | |||||
| } | |||||
| endif | |||||
| if '_L' == ext | |||||
| kcfg += { | |||||
| 'undef': ['DOUBLE'], | |||||
| 'def': ['COMPLEX', 'LOWER'] | |||||
| } | |||||
| endif | |||||
| endforeach | |||||
| endif | endif | ||||
| if 'z' in pkey | if 'z' in pkey | ||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'DOUBLE'], | |||||
| } | |||||
| foreach ext : pval['exts'] | |||||
| kcfg += {'name': pkey + _kop['base'] + ext} | |||||
| # Level 1 | |||||
| if '_k' == ext | |||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'DOUBLE'], | |||||
| } | |||||
| endif | |||||
| # Level 2 | |||||
| if '_n' == ext | |||||
| kcfg += { | |||||
| 'undef': ['CONJ', 'XCONJ', 'TRANS'], | |||||
| 'def': ['COMPLEX', 'DOUBLE'], | |||||
| } | |||||
| endif | |||||
| if '_t' == ext | |||||
| kcfg += { | |||||
| 'undef': ['CONJ', 'XCONJ'], | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'TRANS'] | |||||
| } | |||||
| endif | |||||
| if '_r' == ext | |||||
| kcfg += { | |||||
| 'undef': ['TRANS', 'XCONJ'], | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'CONJ'] | |||||
| } | |||||
| endif | |||||
| if '_c' == ext | |||||
| kcfg += { | |||||
| 'undef': ['XCONJ'], | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'TRANS', 'CONJ'] | |||||
| } | |||||
| endif | |||||
| if '_o' == ext | |||||
| kcfg += { | |||||
| 'undef': ['CONJ', 'TRANS'], | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_u' == ext | |||||
| kcfg += { | |||||
| 'undef': ['CONJ'], | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'TRANS', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_s' == ext | |||||
| kcfg += { | |||||
| 'undef': ['TRANS'], | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'CONJ', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_d' == ext | |||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'TRANS', 'CONJ', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_U' == ext | |||||
| kcfg += { | |||||
| 'undef': ['LOWER'], | |||||
| 'def': ['COMPLEX', 'DOUBLE'] | |||||
| } | |||||
| endif | |||||
| if '_L' == ext | |||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'DOUBLE', 'LOWER'] | |||||
| } | |||||
| endif | |||||
| endforeach | |||||
| endif | endif | ||||
| if 'x' in pkey | if 'x' in pkey | ||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'DXDOUBLE'], | |||||
| } | |||||
| foreach ext : pval['exts'] | |||||
| kcfg += {'name': pkey + _kop['base'] + ext} | |||||
| # Level 1 | |||||
| if '_k' == ext | |||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'XDOUBLE'], | |||||
| } | |||||
| endif | |||||
| # Level 2 | |||||
| if '_n' == ext | |||||
| kcfg += { | |||||
| 'undef': ['XCONJ', 'CONJ', 'TRANS'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX'], | |||||
| } | |||||
| endif | |||||
| if '_t' == ext | |||||
| kcfg += { | |||||
| 'undef': ['CONJ', 'XCONJ'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'TRANS'] | |||||
| } | |||||
| endif | |||||
| if '_r' == ext | |||||
| kcfg += { | |||||
| 'undef': ['TRANS', 'XCONJ'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'CONJ'] | |||||
| } | |||||
| endif | |||||
| if '_c' == ext | |||||
| kcfg += { | |||||
| 'undef': ['XCONJ'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'TRANS', 'CONJ'] | |||||
| } | |||||
| endif | |||||
| if '_o' == ext | |||||
| kcfg += { | |||||
| 'undef': ['TRANS', 'CONJ'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_u' == ext | |||||
| kcfg += { | |||||
| 'undef': ['CONJ'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'TRANS', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_s' == ext | |||||
| kcfg += { | |||||
| 'undef': ['TRANS'], | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'CONJ', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_d' == ext | |||||
| kcfg += { | |||||
| 'def': ['XDOUBLE', 'COMPLEX', 'TRANS', 'CONJ', 'XCONJ'] | |||||
| } | |||||
| endif | |||||
| if '_U' == ext | |||||
| kcfg += { | |||||
| 'undef': ['LOWER'], | |||||
| 'def': ['COMPLEX', 'XDOUBLE'] | |||||
| } | |||||
| endif | |||||
| if '_L' == ext | |||||
| kcfg += { | |||||
| 'def': ['COMPLEX', 'XDOUBLE', 'LOWER'] | |||||
| } | |||||
| endif | |||||
| endforeach | |||||
| endif | endif | ||||
| message(kcfg) | message(kcfg) | ||||
| endforeach | endforeach | ||||