Commit 4f8c55c5 authored by Yuanhan Liu's avatar Yuanhan Liu Committed by NeilBrown

lib/raid6: build proper files on corresponding arch

sse and avx2 stuff only exist on x86 arch, and we don't need to build
altivec on x86. And we can do that at lib/raid6/Makefile.
Proposed-by: default avatarH. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarYuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: default avatarH. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarJim Kukunas <james.t.kukunas@linux.intel.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 2c935842
obj-$(CONFIG_RAID6_PQ) += raid6_pq.o obj-$(CONFIG_RAID6_PQ) += raid6_pq.o
raid6_pq-y += algos.o recov.o recov_ssse3.o recov_avx2.o tables.o int1.o int2.o int4.o \ raid6_pq-y += algos.o recov.o tables.o int1.o int2.o int4.o \
int8.o int16.o int32.o altivec1.o altivec2.o altivec4.o \ int8.o int16.o int32.o
altivec8.o mmx.o sse1.o sse2.o avx2.o
raid6_pq-$(CONFIG_X86) += recov_ssse3.o recov_avx2.o mmx.o sse1.o sse2.o avx2.o
raid6_pq-$(CONFIG_ALTIVEC) += altivec1.o altivec2.o altivec4.o altivec8.o
hostprogs-y += mktables hostprogs-y += mktables
quiet_cmd_unroll = UNROLL $@ quiet_cmd_unroll = UNROLL $@
......
...@@ -24,13 +24,10 @@ ...@@ -24,13 +24,10 @@
#include <linux/raid/pq.h> #include <linux/raid/pq.h>
#ifdef CONFIG_ALTIVEC
#include <altivec.h> #include <altivec.h>
#ifdef __KERNEL__ #ifdef __KERNEL__
# include <asm/cputable.h> # include <asm/cputable.h>
# include <asm/switch_to.h> # include <asm/switch_to.h>
#endif
/* /*
* This is the C data type to use. We use a vector of * This is the C data type to use. We use a vector of
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* MMX implementation of RAID-6 syndrome functions * MMX implementation of RAID-6 syndrome functions
*/ */
#if defined(__i386__) && !defined(__arch_um__) #ifdef CONFIG_X86_32
#include <linux/raid/pq.h> #include <linux/raid/pq.h>
#include "x86.h" #include "x86.h"
......
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
* of the License. * of the License.
*/ */
#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
#if CONFIG_AS_AVX2 #if CONFIG_AS_AVX2
#include <linux/raid/pq.h> #include <linux/raid/pq.h>
...@@ -323,5 +321,3 @@ const struct raid6_recov_calls raid6_recov_avx2 = { ...@@ -323,5 +321,3 @@ const struct raid6_recov_calls raid6_recov_avx2 = {
#else #else
#warning "your version of binutils lacks AVX2 support" #warning "your version of binutils lacks AVX2 support"
#endif #endif
#endif
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
* of the License. * of the License.
*/ */
#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
#include <linux/raid/pq.h> #include <linux/raid/pq.h>
#include "x86.h" #include "x86.h"
...@@ -332,5 +330,3 @@ const struct raid6_recov_calls raid6_recov_ssse3 = { ...@@ -332,5 +330,3 @@ const struct raid6_recov_calls raid6_recov_ssse3 = {
#endif #endif
.priority = 1, .priority = 1,
}; };
#endif
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
* worthwhile as a separate implementation. * worthwhile as a separate implementation.
*/ */
#if defined(__i386__) && !defined(__arch_um__) #ifdef CONFIG_X86_32
#include <linux/raid/pq.h> #include <linux/raid/pq.h>
#include "x86.h" #include "x86.h"
......
...@@ -17,8 +17,6 @@ ...@@ -17,8 +17,6 @@
* *
*/ */
#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
#include <linux/raid/pq.h> #include <linux/raid/pq.h>
#include "x86.h" #include "x86.h"
...@@ -159,9 +157,7 @@ const struct raid6_calls raid6_sse2x2 = { ...@@ -159,9 +157,7 @@ const struct raid6_calls raid6_sse2x2 = {
1 /* Has cache hints */ 1 /* Has cache hints */
}; };
#endif #ifdef CONFIG_X86_64
#if defined(__x86_64__) && !defined(__arch_um__)
/* /*
* Unrolled-by-4 SSE2 implementation * Unrolled-by-4 SSE2 implementation
...@@ -259,4 +255,4 @@ const struct raid6_calls raid6_sse2x4 = { ...@@ -259,4 +255,4 @@ const struct raid6_calls raid6_sse2x4 = {
1 /* Has cache hints */ 1 /* Has cache hints */
}; };
#endif #endif /* CONFIG_X86_64 */
...@@ -10,16 +10,31 @@ LD = ld ...@@ -10,16 +10,31 @@ LD = ld
AWK = awk -f AWK = awk -f
AR = ar AR = ar
RANLIB = ranlib RANLIB = ranlib
OBJS = int1.o int2.o int4.o int8.o int16.o int32.o recov.o algos.o tables.o
ARCH := $(shell uname -m 2>/dev/null | sed -e /s/i.86/i386/) ARCH := $(shell uname -m 2>/dev/null | sed -e /s/i.86/i386/)
ifeq ($(ARCH),i386) ifeq ($(ARCH),i386)
CFLAGS += -DCONFIG_X86_32 CFLAGS += -DCONFIG_X86_32
IS_X86 = yes
endif endif
ifeq ($(ARCH),x86_64) ifeq ($(ARCH),x86_64)
CFLAGS += -DCONFIG_X86_64 CFLAGS += -DCONFIG_X86_64
IS_X86 = yes
endif
ifeq ($(IS_X86),yes)
OBJS += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o
CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1" | \
gcc -c -x assembler - >&/dev/null && \
rm ./-.o && echo -DCONFIG_AS_AVX2=1)
else
HAS_ALTIVEC := $(shell echo -e '\#include <altivec.h>\nvector int a;' |\
gcc -c -x c - >&/dev/null && \
rm ./-.o && echo yes)
ifeq ($(HAS_ALTIVEC),yes)
OBJS += altivec1.o altivec2.o altivec4.o altivec8.o
endif
endif endif
CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1"| gcc -c -x assembler - &&\
rm ./-.o && echo -DCONFIG_AS_AVX2=1)
.c.o: .c.o:
$(CC) $(CFLAGS) -c -o $@ $< $(CC) $(CFLAGS) -c -o $@ $<
...@@ -32,9 +47,7 @@ CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1"| gcc -c -x assembler - &&\ ...@@ -32,9 +47,7 @@ CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1"| gcc -c -x assembler - &&\
all: raid6.a raid6test all: raid6.a raid6test
raid6.a: int1.o int2.o int4.o int8.o int16.o int32.o mmx.o sse1.o sse2.o avx2.o \ raid6.a: $(OBJS)
altivec1.o altivec2.o altivec4.o altivec8.o recov.o recov_ssse3.o recov_avx2.o algos.o \
tables.o
rm -f $@ rm -f $@
$(AR) cq $@ $^ $(AR) cq $@ $^
$(RANLIB) $@ $(RANLIB) $@
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment