Skip to content

Commit

Permalink
lib/raid6: build proper files on corresponding arch
Browse files Browse the repository at this point in the history
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: H. Peter Anvin <[email protected]>
Signed-off-by: Yuanhan Liu <[email protected]>
Reviewed-by: H. Peter Anvin <[email protected]>
Signed-off-by: Jim Kukunas <[email protected]>
Signed-off-by: NeilBrown <[email protected]>
  • Loading branch information
Yuanhan Liu authored and neilbrown committed Dec 13, 2012
1 parent 2c93584 commit 4f8c55c
Show file tree
Hide file tree
Showing 8 changed files with 28 additions and 27 deletions.
9 changes: 6 additions & 3 deletions lib/raid6/Makefile
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
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 \
int8.o int16.o int32.o altivec1.o altivec2.o altivec4.o \
altivec8.o mmx.o sse1.o sse2.o avx2.o
raid6_pq-y += algos.o recov.o tables.o int1.o int2.o int4.o \
int8.o int16.o int32.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

quiet_cmd_unroll = UNROLL $@
Expand Down
3 changes: 0 additions & 3 deletions lib/raid6/altivec.uc
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,10 @@

#include <linux/raid/pq.h>

#ifdef CONFIG_ALTIVEC

#include <altivec.h>
#ifdef __KERNEL__
# include <asm/cputable.h>
# include <asm/switch_to.h>
#endif

/*
* This is the C data type to use. We use a vector of
Expand Down
2 changes: 1 addition & 1 deletion lib/raid6/mmx.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
* MMX implementation of RAID-6 syndrome functions
*/

#if defined(__i386__) && !defined(__arch_um__)
#ifdef CONFIG_X86_32

#include <linux/raid/pq.h>
#include "x86.h"
Expand Down
4 changes: 0 additions & 4 deletions lib/raid6/recov_avx2.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
* of the License.
*/

#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)

#if CONFIG_AS_AVX2

#include <linux/raid/pq.h>
Expand Down Expand Up @@ -323,5 +321,3 @@ const struct raid6_recov_calls raid6_recov_avx2 = {
#else
#warning "your version of binutils lacks AVX2 support"
#endif

#endif
4 changes: 0 additions & 4 deletions lib/raid6/recov_ssse3.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
* of the License.
*/

#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)

#include <linux/raid/pq.h>
#include "x86.h"

Expand Down Expand Up @@ -332,5 +330,3 @@ const struct raid6_recov_calls raid6_recov_ssse3 = {
#endif
.priority = 1,
};

#endif
2 changes: 1 addition & 1 deletion lib/raid6/sse1.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
* worthwhile as a separate implementation.
*/

#if defined(__i386__) && !defined(__arch_um__)
#ifdef CONFIG_X86_32

#include <linux/raid/pq.h>
#include "x86.h"
Expand Down
8 changes: 2 additions & 6 deletions lib/raid6/sse2.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
*
*/

#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)

#include <linux/raid/pq.h>
#include "x86.h"

Expand Down Expand Up @@ -159,9 +157,7 @@ const struct raid6_calls raid6_sse2x2 = {
1 /* Has cache hints */
};

#endif

#if defined(__x86_64__) && !defined(__arch_um__)
#ifdef CONFIG_X86_64

/*
* Unrolled-by-4 SSE2 implementation
Expand Down Expand Up @@ -259,4 +255,4 @@ const struct raid6_calls raid6_sse2x4 = {
1 /* Has cache hints */
};

#endif
#endif /* CONFIG_X86_64 */
23 changes: 18 additions & 5 deletions lib/raid6/test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,31 @@ LD = ld
AWK = awk -f
AR = ar
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/)
ifeq ($(ARCH),i386)
CFLAGS += -DCONFIG_X86_32
IS_X86 = yes
endif
ifeq ($(ARCH),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
CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1"| gcc -c -x assembler - &&\
rm ./-.o && echo -DCONFIG_AS_AVX2=1)

.c.o:
$(CC) $(CFLAGS) -c -o $@ $<
Expand All @@ -32,9 +47,7 @@ CFLAGS += $(shell echo "vpbroadcastb %xmm0, %ymm1"| gcc -c -x assembler - &&\

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 \
altivec1.o altivec2.o altivec4.o altivec8.o recov.o recov_ssse3.o recov_avx2.o algos.o \
tables.o
raid6.a: $(OBJS)
rm -f $@
$(AR) cq $@ $^
$(RANLIB) $@
Expand Down

0 comments on commit 4f8c55c

Please sign in to comment.