lib/raid6: build proper files on corresponding arch
authorYuanhan Liu <yuanhan.liu@linux.intel.com>
Fri, 30 Nov 2012 21:10:40 +0000 (13:10 -0800)
committerNeilBrown <neilb@suse.de>
Thu, 13 Dec 2012 08:51:04 +0000 (19:51 +1100)
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 <hpa@zytor.com>
Signed-off-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
Reviewed-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Jim Kukunas <james.t.kukunas@linux.intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
lib/raid6/Makefile
lib/raid6/altivec.uc
lib/raid6/mmx.c
lib/raid6/recov_avx2.c
lib/raid6/recov_ssse3.c
lib/raid6/sse1.c
lib/raid6/sse2.c
lib/raid6/test/Makefile

index 3430711b9bdfcbbaac2739377161edbafd8dec6b..9f7c184725d7329d25fe35f1a0c3ae701243b753 100644 (file)
@@ -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  $@
index b71012b756f497551b6373c5fc009d25ef7772cf..7cc12b532e95b90d85e3968099359a8ba19b2708 100644 (file)
 
 #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
index 279347f23094e14f5044ab413fba4859e520d4d4..590c71c9e2005b407166cde2e37a0c8066c7ef0d 100644 (file)
@@ -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"
index 43a9bab918797d7d1d136154d877ca87778258cd..e1eea433a4939537a67c22305f1f88eee29d0faf 100644 (file)
@@ -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>
@@ -323,5 +321,3 @@ const struct raid6_recov_calls raid6_recov_avx2 = {
 #else
 #warning "your version of binutils lacks AVX2 support"
 #endif
-
-#endif
index ecb710c0b4d92110558b810045172e7046c20ec0..a9168328f03b3dac26f9f2fbd15fe1397147ee2e 100644 (file)
@@ -7,8 +7,6 @@
  * of the License.
  */
 
-#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
-
 #include <linux/raid/pq.h>
 #include "x86.h"
 
@@ -332,5 +330,3 @@ const struct raid6_recov_calls raid6_recov_ssse3 = {
 #endif
        .priority = 1,
 };
-
-#endif
index 10dd91948c07900f8811248da682fc30767cc1fc..f7629713944505e575e2d2746c62ebaef3ca6946 100644 (file)
@@ -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"
index bc2d57daa589a714a29fc21e96927636b68b7679..85b82c85f28e61699bbf94e19e3f2f7750108d10 100644 (file)
@@ -17,8 +17,6 @@
  *
  */
 
-#if (defined(__i386__) || defined(__x86_64__)) && !defined(__arch_um__)
-
 #include <linux/raid/pq.h>
 #include "x86.h"
 
@@ -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
@@ -259,4 +255,4 @@ const struct raid6_calls raid6_sse2x4 = {
        1                       /* Has cache hints */
 };
 
-#endif
+#endif /* CONFIG_X86_64 */
index 754cbac0f9f80dcadae67b14270227132ae43c24..087332dbf8aa164630148626e33c523dfd52dbf7 100644 (file)
@@ -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 $@ $<
@@ -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) $@