1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyunobj-$(CONFIG_RAID6_PQ) += raid6_pq.o 3*4882a593Smuzhiyun 4*4882a593Smuzhiyunraid6_pq-y += algos.o recov.o tables.o int1.o int2.o int4.o \ 5*4882a593Smuzhiyun int8.o int16.o int32.o 6*4882a593Smuzhiyun 7*4882a593Smuzhiyunraid6_pq-$(CONFIG_X86) += recov_ssse3.o recov_avx2.o mmx.o sse1.o sse2.o avx2.o avx512.o recov_avx512.o 8*4882a593Smuzhiyunraid6_pq-$(CONFIG_ALTIVEC) += altivec1.o altivec2.o altivec4.o altivec8.o \ 9*4882a593Smuzhiyun vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o 10*4882a593Smuzhiyunraid6_pq-$(CONFIG_KERNEL_MODE_NEON) += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o 11*4882a593Smuzhiyunraid6_pq-$(CONFIG_S390) += s390vx8.o recov_s390xc.o 12*4882a593Smuzhiyun 13*4882a593Smuzhiyunhostprogs += mktables 14*4882a593Smuzhiyun 15*4882a593Smuzhiyunifeq ($(CONFIG_ALTIVEC),y) 16*4882a593Smuzhiyunaltivec_flags := -maltivec $(call cc-option,-mabi=altivec) 17*4882a593Smuzhiyun 18*4882a593Smuzhiyunifdef CONFIG_CC_IS_CLANG 19*4882a593Smuzhiyun# clang ppc port does not yet support -maltivec when -msoft-float is 20*4882a593Smuzhiyun# enabled. A future release of clang will resolve this 21*4882a593Smuzhiyun# https://bugs.llvm.org/show_bug.cgi?id=31177 22*4882a593SmuzhiyunCFLAGS_REMOVE_altivec1.o += -msoft-float 23*4882a593SmuzhiyunCFLAGS_REMOVE_altivec2.o += -msoft-float 24*4882a593SmuzhiyunCFLAGS_REMOVE_altivec4.o += -msoft-float 25*4882a593SmuzhiyunCFLAGS_REMOVE_altivec8.o += -msoft-float 26*4882a593SmuzhiyunCFLAGS_REMOVE_vpermxor1.o += -msoft-float 27*4882a593SmuzhiyunCFLAGS_REMOVE_vpermxor2.o += -msoft-float 28*4882a593SmuzhiyunCFLAGS_REMOVE_vpermxor4.o += -msoft-float 29*4882a593SmuzhiyunCFLAGS_REMOVE_vpermxor8.o += -msoft-float 30*4882a593Smuzhiyunendif 31*4882a593Smuzhiyunendif 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun# The GCC option -ffreestanding is required in order to compile code containing 34*4882a593Smuzhiyun# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel) 35*4882a593Smuzhiyunifeq ($(CONFIG_KERNEL_MODE_NEON),y) 36*4882a593SmuzhiyunNEON_FLAGS := -ffreestanding 37*4882a593Smuzhiyunifeq ($(ARCH),arm) 38*4882a593SmuzhiyunNEON_FLAGS += -march=armv7-a -mfloat-abi=softfp -mfpu=neon 39*4882a593Smuzhiyunendif 40*4882a593SmuzhiyunCFLAGS_recov_neon_inner.o += $(NEON_FLAGS) 41*4882a593Smuzhiyunifeq ($(ARCH),arm64) 42*4882a593SmuzhiyunCFLAGS_REMOVE_recov_neon_inner.o += -mgeneral-regs-only 43*4882a593SmuzhiyunCFLAGS_REMOVE_neon1.o += -mgeneral-regs-only 44*4882a593SmuzhiyunCFLAGS_REMOVE_neon2.o += -mgeneral-regs-only 45*4882a593SmuzhiyunCFLAGS_REMOVE_neon4.o += -mgeneral-regs-only 46*4882a593SmuzhiyunCFLAGS_REMOVE_neon8.o += -mgeneral-regs-only 47*4882a593Smuzhiyunendif 48*4882a593Smuzhiyunendif 49*4882a593Smuzhiyun 50*4882a593Smuzhiyunquiet_cmd_unroll = UNROLL $@ 51*4882a593Smuzhiyun cmd_unroll = $(AWK) -v N=$* -f $(srctree)/$(src)/unroll.awk < $< > $@ 52*4882a593Smuzhiyun 53*4882a593Smuzhiyuntargets += int1.c int2.c int4.c int8.c int16.c int32.c 54*4882a593Smuzhiyun$(obj)/int%.c: $(src)/int.uc $(src)/unroll.awk FORCE 55*4882a593Smuzhiyun $(call if_changed,unroll) 56*4882a593Smuzhiyun 57*4882a593SmuzhiyunCFLAGS_altivec1.o += $(altivec_flags) 58*4882a593SmuzhiyunCFLAGS_altivec2.o += $(altivec_flags) 59*4882a593SmuzhiyunCFLAGS_altivec4.o += $(altivec_flags) 60*4882a593SmuzhiyunCFLAGS_altivec8.o += $(altivec_flags) 61*4882a593Smuzhiyuntargets += altivec1.c altivec2.c altivec4.c altivec8.c 62*4882a593Smuzhiyun$(obj)/altivec%.c: $(src)/altivec.uc $(src)/unroll.awk FORCE 63*4882a593Smuzhiyun $(call if_changed,unroll) 64*4882a593Smuzhiyun 65*4882a593SmuzhiyunCFLAGS_vpermxor1.o += $(altivec_flags) 66*4882a593SmuzhiyunCFLAGS_vpermxor2.o += $(altivec_flags) 67*4882a593SmuzhiyunCFLAGS_vpermxor4.o += $(altivec_flags) 68*4882a593SmuzhiyunCFLAGS_vpermxor8.o += $(altivec_flags) 69*4882a593Smuzhiyuntargets += vpermxor1.c vpermxor2.c vpermxor4.c vpermxor8.c 70*4882a593Smuzhiyun$(obj)/vpermxor%.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE 71*4882a593Smuzhiyun $(call if_changed,unroll) 72*4882a593Smuzhiyun 73*4882a593SmuzhiyunCFLAGS_neon1.o += $(NEON_FLAGS) 74*4882a593SmuzhiyunCFLAGS_neon2.o += $(NEON_FLAGS) 75*4882a593SmuzhiyunCFLAGS_neon4.o += $(NEON_FLAGS) 76*4882a593SmuzhiyunCFLAGS_neon8.o += $(NEON_FLAGS) 77*4882a593Smuzhiyuntargets += neon1.c neon2.c neon4.c neon8.c 78*4882a593Smuzhiyun$(obj)/neon%.c: $(src)/neon.uc $(src)/unroll.awk FORCE 79*4882a593Smuzhiyun $(call if_changed,unroll) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyuntargets += s390vx8.c 82*4882a593Smuzhiyun$(obj)/s390vx%.c: $(src)/s390vx.uc $(src)/unroll.awk FORCE 83*4882a593Smuzhiyun $(call if_changed,unroll) 84*4882a593Smuzhiyun 85*4882a593Smuzhiyunquiet_cmd_mktable = TABLE $@ 86*4882a593Smuzhiyun cmd_mktable = $(obj)/mktables > $@ 87*4882a593Smuzhiyun 88*4882a593Smuzhiyuntargets += tables.c 89*4882a593Smuzhiyun$(obj)/tables.c: $(obj)/mktables FORCE 90*4882a593Smuzhiyun $(call if_changed,mktable) 91