1# SPDX-License-Identifier: GPL-2.0 2obj-$(CONFIG_RAID6_PQ) += raid6_pq.o 3 4raid6_pq-y += algos.o recov.o tables.o int1.o int2.o int4.o \ 5 int8.o int16.o int32.o 6 7raid6_pq-$(CONFIG_X86) += recov_ssse3.o recov_avx2.o mmx.o sse1.o sse2.o avx2.o avx512.o recov_avx512.o 8raid6_pq-$(CONFIG_ALTIVEC) += altivec1.o altivec2.o altivec4.o altivec8.o \ 9 vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o 10raid6_pq-$(CONFIG_KERNEL_MODE_NEON) += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o 11raid6_pq-$(CONFIG_S390) += s390vx8.o recov_s390xc.o 12 13hostprogs-y += mktables 14 15quiet_cmd_unroll = UNROLL $@ 16 cmd_unroll = $(AWK) -f$(srctree)/$(src)/unroll.awk -vN=$(UNROLL) \ 17 < $< > $@ || ( rm -f $@ && exit 1 ) 18 19ifeq ($(CONFIG_ALTIVEC),y) 20altivec_flags := -maltivec $(call cc-option,-mabi=altivec) 21endif 22 23# The GCC option -ffreestanding is required in order to compile code containing 24# ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel) 25ifeq ($(CONFIG_KERNEL_MODE_NEON),y) 26NEON_FLAGS := -ffreestanding 27ifeq ($(ARCH),arm) 28NEON_FLAGS += -mfloat-abi=softfp -mfpu=neon 29endif 30CFLAGS_recov_neon_inner.o += $(NEON_FLAGS) 31ifeq ($(ARCH),arm64) 32CFLAGS_REMOVE_recov_neon_inner.o += -mgeneral-regs-only 33CFLAGS_REMOVE_neon1.o += -mgeneral-regs-only 34CFLAGS_REMOVE_neon2.o += -mgeneral-regs-only 35CFLAGS_REMOVE_neon4.o += -mgeneral-regs-only 36CFLAGS_REMOVE_neon8.o += -mgeneral-regs-only 37endif 38endif 39 40targets += int1.c 41$(obj)/int1.c: UNROLL := 1 42$(obj)/int1.c: $(src)/int.uc $(src)/unroll.awk FORCE 43 $(call if_changed,unroll) 44 45targets += int2.c 46$(obj)/int2.c: UNROLL := 2 47$(obj)/int2.c: $(src)/int.uc $(src)/unroll.awk FORCE 48 $(call if_changed,unroll) 49 50targets += int4.c 51$(obj)/int4.c: UNROLL := 4 52$(obj)/int4.c: $(src)/int.uc $(src)/unroll.awk FORCE 53 $(call if_changed,unroll) 54 55targets += int8.c 56$(obj)/int8.c: UNROLL := 8 57$(obj)/int8.c: $(src)/int.uc $(src)/unroll.awk FORCE 58 $(call if_changed,unroll) 59 60targets += int16.c 61$(obj)/int16.c: UNROLL := 16 62$(obj)/int16.c: $(src)/int.uc $(src)/unroll.awk FORCE 63 $(call if_changed,unroll) 64 65targets += int32.c 66$(obj)/int32.c: UNROLL := 32 67$(obj)/int32.c: $(src)/int.uc $(src)/unroll.awk FORCE 68 $(call if_changed,unroll) 69 70CFLAGS_altivec1.o += $(altivec_flags) 71targets += altivec1.c 72$(obj)/altivec1.c: UNROLL := 1 73$(obj)/altivec1.c: $(src)/altivec.uc $(src)/unroll.awk FORCE 74 $(call if_changed,unroll) 75 76CFLAGS_altivec2.o += $(altivec_flags) 77targets += altivec2.c 78$(obj)/altivec2.c: UNROLL := 2 79$(obj)/altivec2.c: $(src)/altivec.uc $(src)/unroll.awk FORCE 80 $(call if_changed,unroll) 81 82CFLAGS_altivec4.o += $(altivec_flags) 83targets += altivec4.c 84$(obj)/altivec4.c: UNROLL := 4 85$(obj)/altivec4.c: $(src)/altivec.uc $(src)/unroll.awk FORCE 86 $(call if_changed,unroll) 87 88CFLAGS_altivec8.o += $(altivec_flags) 89targets += altivec8.c 90$(obj)/altivec8.c: UNROLL := 8 91$(obj)/altivec8.c: $(src)/altivec.uc $(src)/unroll.awk FORCE 92 $(call if_changed,unroll) 93 94CFLAGS_vpermxor1.o += $(altivec_flags) 95targets += vpermxor1.c 96$(obj)/vpermxor1.c: UNROLL := 1 97$(obj)/vpermxor1.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE 98 $(call if_changed,unroll) 99 100CFLAGS_vpermxor2.o += $(altivec_flags) 101targets += vpermxor2.c 102$(obj)/vpermxor2.c: UNROLL := 2 103$(obj)/vpermxor2.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE 104 $(call if_changed,unroll) 105 106CFLAGS_vpermxor4.o += $(altivec_flags) 107targets += vpermxor4.c 108$(obj)/vpermxor4.c: UNROLL := 4 109$(obj)/vpermxor4.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE 110 $(call if_changed,unroll) 111 112CFLAGS_vpermxor8.o += $(altivec_flags) 113targets += vpermxor8.c 114$(obj)/vpermxor8.c: UNROLL := 8 115$(obj)/vpermxor8.c: $(src)/vpermxor.uc $(src)/unroll.awk FORCE 116 $(call if_changed,unroll) 117 118CFLAGS_neon1.o += $(NEON_FLAGS) 119targets += neon1.c 120$(obj)/neon1.c: UNROLL := 1 121$(obj)/neon1.c: $(src)/neon.uc $(src)/unroll.awk FORCE 122 $(call if_changed,unroll) 123 124CFLAGS_neon2.o += $(NEON_FLAGS) 125targets += neon2.c 126$(obj)/neon2.c: UNROLL := 2 127$(obj)/neon2.c: $(src)/neon.uc $(src)/unroll.awk FORCE 128 $(call if_changed,unroll) 129 130CFLAGS_neon4.o += $(NEON_FLAGS) 131targets += neon4.c 132$(obj)/neon4.c: UNROLL := 4 133$(obj)/neon4.c: $(src)/neon.uc $(src)/unroll.awk FORCE 134 $(call if_changed,unroll) 135 136CFLAGS_neon8.o += $(NEON_FLAGS) 137targets += neon8.c 138$(obj)/neon8.c: UNROLL := 8 139$(obj)/neon8.c: $(src)/neon.uc $(src)/unroll.awk FORCE 140 $(call if_changed,unroll) 141 142targets += s390vx8.c 143$(obj)/s390vx8.c: UNROLL := 8 144$(obj)/s390vx8.c: $(src)/s390vx.uc $(src)/unroll.awk FORCE 145 $(call if_changed,unroll) 146 147quiet_cmd_mktable = TABLE $@ 148 cmd_mktable = $(obj)/mktables > $@ || ( rm -f $@ && exit 1 ) 149 150targets += tables.c 151$(obj)/tables.c: $(obj)/mktables FORCE 152 $(call if_changed,mktable) 153