On 2015/3/6 0:12, Yerden Zhumabekov wrote: > Hi Michael, > > Thanks for this patch, in fact I didn't try to compile it on i686 when > developing original software fallback for CRC32. > > I think if we want to make code compilable as wide as possible, we > should compile out all SSE4.2 instructions. As to the patch, we may > compile out 'crc32l' instruction emitting code if the arch is not x86. > This concerns two functions: crc32c_sse42_u32() and > crc32c_sse42_u64_mimic().
OK, I will add the check for crc32l, make it only works for x86 Thanks, Michael > The compile check might be something like this: > > #if defined(RTE_ARCH_I686) || defined(RTE_ARCH_X86_64) > #endif > > Otherwise, the patch looks good. > > 05.03.2015 19:15, Michael Qiu ?????: >> CC rte_hash.o >> Error: unsupported instruction `crc32' >> >> The root cause is that i686 platform does not support 'crc32q' >> Need make it only available in x86_64 platform >> >> Signed-off-by: Michael Qiu <michael.qiu at intel.com> >> --- >> lib/librte_hash/rte_hash_crc.h | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/lib/librte_hash/rte_hash_crc.h b/lib/librte_hash/rte_hash_crc.h >> index d28bb2a..4e9546f 100644 >> --- a/lib/librte_hash/rte_hash_crc.h >> +++ b/lib/librte_hash/rte_hash_crc.h >> @@ -374,6 +374,7 @@ crc32c_sse42_u32(uint32_t data, uint32_t init_val) >> return init_val; >> } >> >> +#ifdef RTE_ARCH_X86_64 >> static inline uint32_t >> crc32c_sse42_u64(uint64_t data, uint64_t init_val) >> { >> @@ -383,6 +384,7 @@ crc32c_sse42_u64(uint64_t data, uint64_t init_val) >> : [data] "rm" (data)); >> return init_val; >> } >> +#endif >> >> static inline uint32_t >> crc32c_sse42_u64_mimic(uint64_t data, uint64_t init_val) >> @@ -476,8 +478,10 @@ rte_hash_crc_4byte(uint32_t data, uint32_t init_val) >> static inline uint32_t >> rte_hash_crc_8byte(uint64_t data, uint32_t init_val) >> { >> +#ifdef RTE_ARCH_X86_64 >> if (likely(crc32_alg == CRC32_SSE42_x64)) >> return crc32c_sse42_u64(data, init_val); >> +#endif >> >> if (likely(crc32_alg & CRC32_SSE42)) >> return crc32c_sse42_u64_mimic(data, init_val);