Prevent compiler attempts to use k0 as mask register
[platform/upstream/openblas.git] / kernel / Makefile
1 ifdef TARGET_CORE
2 TARGET = $(TARGET_CORE)
3 endif
4
5 TOPDIR  = ..
6 include $(TOPDIR)/Makefile.system
7
8 ifeq ($(ARCH), power)
9 ifeq ($(C_COMPILER), CLANG)
10  override CFLAGS += -fno-integrated-as
11 endif
12 endif
13
14 AVX2OPT = 
15 ifeq ($(C_COMPILER), GCC)
16 # AVX2 support was added in 4.7.0
17 GCCVERSIONCHECK := $(GCCVERSIONGT4)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ7)
18 ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
19    AVX2OPT = -mavx2
20   endif
21 endif
22 ifeq ($(C_COMPILER), CLANG)
23 # Any clang posing as gcc 4.2 should be new enough (3.4 or later)
24   GCCVERSIONCHECK := $(GCCVERSIONGT4)$(GCCVERSIONGTEQ4)$(GCCMINORVERSIONGTEQ2)
25   ifeq ($(GCCVERSIONCHECK), $(filter $(GCCVERSIONCHECK), 011 110 111))
26    AVX2OPT = -mavx2
27   endif
28 endif
29 ifdef NO_AVX2
30  AVX2OPT=
31 endif
32
33 ifdef TARGET_CORE
34 ifeq ($(TARGET_CORE), SAPPHIRERAPIDS)
35  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
36  ifeq ($(GCCVERSIONGTEQ10), 1) 
37   override CFLAGS += -march=sapphirerapids
38  else 
39   override CFLAGS += -march=skylake-avx512 -mavx512f
40  endif 
41  ifeq ($(OSNAME), CYGWIN_NT)
42   override CFLAGS += -fno-asynchronous-unwind-tables
43  endif
44  ifeq ($(OSNAME), WINNT)
45   ifeq ($(C_COMPILER), GCC)
46    override CFLAGS += -fno-asynchronous-unwind-tables
47   endif
48  endif
49 else ifeq ($(TARGET_CORE), COOPERLAKE)
50  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
51  ifeq ($(GCCVERSIONGTEQ10), 1) 
52   override CFLAGS += -march=cooperlake
53  else 
54   override CFLAGS += -march=skylake-avx512 -mavx512f
55  endif 
56  ifeq ($(OSNAME), CYGWIN_NT)
57   override CFLAGS += -fno-asynchronous-unwind-tables
58  endif
59  ifeq ($(OSNAME), WINNT)
60   ifeq ($(C_COMPILER), GCC)
61    override CFLAGS += -fno-asynchronous-unwind-tables
62   endif
63  endif
64 else ifeq ($(TARGET_CORE), SKYLAKEX)
65  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) -march=skylake-avx512 -mavx512f
66  ifeq ($(OSNAME), CYGWIN_NT)
67   override CFLAGS += -fno-asynchronous-unwind-tables
68  endif
69  ifeq ($(OSNAME), WINNT)
70   ifeq ($(C_COMPILER), GCC)
71    override CFLAGS += -fno-asynchronous-unwind-tables
72   endif
73  endif
74 else ifeq ($(TARGET_CORE), HASWELL)
75  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(AVX2OPT)
76 else ifeq ($(TARGET_CORE), LOONGSON3R4)
77  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE) $(MSA_FLAGS)
78 else
79  override CFLAGS += -DBUILD_KERNEL -DTABLE_NAME=gotoblas_$(TARGET_CORE)
80 endif
81 BUILD_KERNEL = 1
82 KDIR =
83 TSUFFIX = _$(TARGET_CORE)
84 else
85 TARGET_CORE = $(CORE)
86 KDIR =
87 TSUFFIX =
88 ifeq ($(TARGET_CORE), LOONGSON3R4)
89   override CFLAGS += $(MSA_FLAGS)
90 endif
91 endif
92
93 -include $(KERNELDIR)/KERNEL.$(TARGET_CORE)
94
95 include $(KERNELDIR)/KERNEL
96
97 include Makefile.L1
98
99 include Makefile.L2
100
101 include Makefile.L3
102
103 include Makefile.LA
104
105 HPLOBJS = \
106         dgemm_kernel.$(SUFFIX) \
107         $(DGEMMINCOPYOBJ) $(DGEMMITCOPYOBJ) \
108         $(DGEMMONCOPYOBJ) $(DGEMMOTCOPYOBJ) \
109         dtrsm_kernel_LN.$(SUFFIX) dtrsm_kernel_LT.$(SUFFIX) \
110         dtrsm_kernel_RN.$(SUFFIX) dtrsm_kernel_RT.$(SUFFIX) \
111         daxpy_k.$(SUFFIX) dcopy_k.$(SUFFIX) ddot_k.$(SUFFIX) \
112         dger_k.$(SUFFIX)  dscal_k.$(SUFFIX) idamax_k.$(SUFFIX) \
113         dgemv_n.$(SUFFIX) dgemv_t.$(SUFFIX) dgemm_beta.$(SUFFIX) \
114         dtrsm_iunucopy.$(SUFFIX) dtrsm_iunncopy.$(SUFFIX) \
115         dtrsm_ilnucopy.$(SUFFIX) dtrsm_ilnncopy.$(SUFFIX) \
116         dtrsm_iutucopy.$(SUFFIX) dtrsm_iutncopy.$(SUFFIX) \
117         dtrsm_iltucopy.$(SUFFIX) dtrsm_iltncopy.$(SUFFIX) \
118         dtrsm_ounucopy.$(SUFFIX) dtrsm_ounncopy.$(SUFFIX) \
119         dtrsm_olnucopy.$(SUFFIX) dtrsm_olnncopy.$(SUFFIX) \
120         dtrsm_outucopy.$(SUFFIX) dtrsm_outncopy.$(SUFFIX) \
121         dtrsm_oltucopy.$(SUFFIX) dtrsm_oltncopy.$(SUFFIX)
122
123 COMMONOBJS      += lsame.$(SUFFIX) scabs1.$(SUFFIX) dcabs1.$(SUFFIX)
124
125 ifeq ($(DYNAMIC_ARCH), 1)
126 SBLASOBJS       += setparam$(TSUFFIX).$(SUFFIX)
127 CCOMMON_OPT     += -DTS=$(TSUFFIX)
128 endif
129
130 KERNEL_INTERFACE = ../common_level1.h ../common_level2.h ../common_level3.h
131 ifneq ($(NO_LAPACK), 1)
132 KERNEL_INTERFACE += ../common_lapack.h
133 endif
134
135 ifeq ($(ARCH), x86)
136 COMMONOBJS      += cpuid.$(SUFFIX)
137 endif
138
139 ifdef EXPRECISION
140 COMMONOBJS      += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
141 endif
142
143 ifdef QUAD_PRECISION
144 COMMONOBJS      += qconjg.$(SUFFIX) qcabs1.$(SUFFIX)
145 endif
146
147 all : libs
148
149 scabs1.$(SUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
150         $(CC) -c $(CFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
151
152 dcabs1.$(SUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
153         $(CC) -c $(CFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
154
155 qcabs1.$(SUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
156         $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
157
158 qconjg.$(SUFFIX): $(KERNELDIR)/qconjg.S
159         $(CC) -c $(CFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
160
161 lsame.$(SUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
162         $(CC) -c $(CFLAGS) -DF_INTERFACE $< -o $(@F)
163
164 setparam$(TSUFFIX).$(SUFFIX): setparam$(TSUFFIX).c kernel$(TSUFFIX).h
165 ifeq ($(USE_GEMM3M), 1)
166         $(CC) -c $(CFLAGS) -DUSE_GEMM3M $< -o $@
167 else
168         $(CC) -c $(CFLAGS) $< -o $@
169 endif
170
171 setparam$(TSUFFIX).c : setparam-ref.c
172         sed 's/TS/$(TSUFFIX)/g' $< > $(@F)
173
174 kernel$(TSUFFIX).h : $(KERNEL_INTERFACE)
175         sed 's/\ *(/$(TSUFFIX)(/g' $^ > $(@F)
176
177
178 cpuid.$(SUFFIX): $(KERNELDIR)/cpuid.S
179         $(CC) -c $(CFLAGS) $< -o $(@F)
180
181 scabs1.$(PSUFFIX): $(KERNELDIR)/$(SCABS_KERNEL)
182         $(CC) -c $(PFLAGS) -DCOMPLEX -UDOUBLE -DF_INTERFACE $< -o $(@F)
183
184 dcabs1.$(PSUFFIX): $(KERNELDIR)/$(DCABS_KERNEL)
185         $(CC) -c $(PFLAGS) -DCOMPLEX -DDOUBLE -DF_INTERFACE $< -o $(@F)
186
187 qcabs1.$(PSUFFIX): $(KERNELDIR)/$(QCABS_KERNEL)
188         $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
189
190 qconjg.$(PSUFFIX): $(KERNELDIR)/qconjg.S
191         $(CC) -c $(PFLAGS) -DCOMPLEX -DXDOUBLE -DF_INTERFACE $< -o $(@F)
192
193 lsame.$(PSUFFIX): $(KERNELDIR)/$(LSAME_KERNEL)
194         $(CC) -c $(PFLAGS) -DF_INTERFACE $< -o $(@F)
195
196 cpuid.$(PSUFFIX): $(KERNELDIR)/cpuid.S
197         $(CC) -c $(PFLAGS) $< -o $(@F)
198
199 #ifdef DYNAMIC_ARCH
200 clean ::
201         @rm -f setparam_*.c kernel_*.h setparam.h kernel.h
202
203 #endif
204
205 include $(TOPDIR)/Makefile.tail