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-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
* 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
/*
pand %xmm3, %xmm1
PCLMULQDQ 0x00, CONSTANT, %xmm1
pxor %xmm2, %xmm1
- pextrd $0x01, %xmm1, %eax
+ PEXTRD 0x01, %xmm1, %eax
ret