[dpdk-dev] [PATCH 1/3] librte_hash: Fix unsupported instruction `crc32' in i686 platform
Qiu, Michael
michael.qiu at intel.com
Thu Mar 5 17:34:52 CET 2015
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);
More information about the dev
mailing list