Whamcloud - gitweb
LU-1786 build: Fix build for crc32 pclmulqdq
authorAlexander.Boyko <alexander_boyko@xyratex.com>
Tue, 28 Aug 2012 07:38:31 +0000 (11:38 +0400)
committerOleg Drokin <green@whamcloud.com>
Fri, 31 Aug 2012 15:47:44 +0000 (11:47 -0400)
Old versions of gcc don`t know pextrd instruction. User mode
libcfs build had wrong dependency with ARCH variable defined.
PEXTRD marco was added for old gcc, wrong dependency was fixed.

Signed-off-by: Alexander Boyko <alexander_boyko@xyratex.com>
Change-Id: I8821a1c25367f0f284a80192ed65d89808d1b2da
Reviewed-on: http://review.whamcloud.com/3801
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Minh Diep <minh.diep@intel.com>
Reviewed-by: James Simmons <uja.ornl@gmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
libcfs/libcfs/Makefile.in
libcfs/libcfs/crc32-pclmul_asm.S

index bf08868..c9cff92 100644 (file)
@@ -42,9 +42,9 @@ endif
 libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \
                   watchdog.o libcfs_string.o hash.o kernel_user_comm.o \
                   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
-                  libcfs_mem.o libcfs_lock.o $(libcfs-pclmul-obj)
+                  libcfs_mem.o libcfs_lock.o
 
-libcfs-objs := $(libcfs-linux-objs) $(libcfs-all-objs)
+libcfs-objs := $(libcfs-linux-objs) $(libcfs-all-objs) $(libcfs-pclmul-obj)
 
 EXTRA_PRE_CFLAGS := -I@LUSTRE@/../libcfs/libcfs
 
index 04a724e..f4d315b 100644 (file)
  * Use macro defenition from linux kernel 2.6.38  */
 
 #define REG_NUM_INVALID        100
+       .macro R32_NUM opd r32
+       \opd = REG_NUM_INVALID
+       .ifc \r32,%eax
+       \opd = 0
+       .endif
+       .ifc \r32,%ecx
+       \opd = 1
+       .endif
+       .ifc \r32,%edx
+       \opd = 2
+       .endif
+       .ifc \r32,%ebx
+       \opd = 3
+       .endif
+       .ifc \r32,%esp
+       \opd = 4
+       .endif
+       .ifc \r32,%ebp
+       \opd = 5
+       .endif
+       .ifc \r32,%esi
+       \opd = 6
+       .endif
+       .ifc \r32,%edi
+       \opd = 7
+       .endif
+       .endm
+
        .macro XMM_NUM opd xmm
        \opd = REG_NUM_INVALID
        .ifc \xmm,%xmm0
        .byte \imm8
        .endm
 
+       .macro PEXTRD imm8 xmm1 reg1
+       XMM_NUM extrd_opd2 \xmm1
+       R32_NUM extrd_opd1 \reg1
+       PFX_OPD_SIZE
+       PFX_REX extrd_opd1 extrd_opd2
+       .byte 0x0f, 0x3a, 0x16
+       MODRM 0xc0 extrd_opd1 extrd_opd2
+       .byte \imm8
+       .endm
 
 .align 16
 /*
@@ -318,6 +355,6 @@ fold_64:
        pand    %xmm3, %xmm1
        PCLMULQDQ 0x00, CONSTANT, %xmm1
        pxor    %xmm2, %xmm1
-       pextrd  $0x01, %xmm1, %eax
+       PEXTRD  0x01, %xmm1, %eax
 
        ret