On 3/18/2019 1:37 AM, Lu, Wenzhuo wrote:
> Hi Ferruh,
> 
> 
>> -----Original Message-----
>> From: Yigit, Ferruh
>> Sent: Saturday, March 16, 2019 1:54 AM
>> To: Lu, Wenzhuo <wenzhuo...@intel.com>; dev@dpdk.org
>> Subject: Re: [dpdk-dev] [PATCH v3 6/8] net/ice: support Rx AVX2 vector
>>
>> On 3/15/2019 6:22 AM, Wenzhuo Lu wrote:
>>> Signed-off-by: Wenzhuo Lu <wenzhuo...@intel.com>
>> <...>
>>
>>> +#ifdef RTE_LIBRTE_ICE_16BYTE_RX_DESC
>>> +           /* for AVX we need alignment otherwise loads are not
>> atomic */
>>> +           if (avx_aligned) {
>>> +                   /* load in descriptors, 2 at a time, in reverse order */
>>> +                   raw_desc6_7 = _mm256_load_si256((void *)(rxdp +
>> 6));
>>> +                   rte_compiler_barrier();
>>> +                   raw_desc4_5 = _mm256_load_si256((void *)(rxdp +
>> 4));
>>> +                   rte_compiler_barrier();
>>> +                   raw_desc2_3 = _mm256_load_si256((void *)(rxdp +
>> 2));
>>> +                   rte_compiler_barrier();
>>> +                   raw_desc0_1 = _mm256_load_si256((void *)(rxdp +
>> 0));
>>> +           } else
>>> +#endif
>>> +           do {
>>> +                   const __m128i raw_desc7 =
>>> +                           _mm_load_si128((void *)(rxdp + 7));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc6 =
>>> +                           _mm_load_si128((void *)(rxdp + 6));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc5 =
>>> +                           _mm_load_si128((void *)(rxdp + 5));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc4 =
>>> +                           _mm_load_si128((void *)(rxdp + 4));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc3 =
>>> +                           _mm_load_si128((void *)(rxdp + 3));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc2 =
>>> +                           _mm_load_si128((void *)(rxdp + 2));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc1 =
>>> +                           _mm_load_si128((void *)(rxdp + 1));
>>> +                   rte_compiler_barrier();
>>> +                   const __m128i raw_desc0 =
>>> +                           _mm_load_si128((void *)(rxdp + 0));
>>> +
>>> +                   raw_desc6_7 =
>>> +                           _mm256_inserti128_si256
>>> +
>>      (_mm256_castsi128_si256(raw_desc6),
>>> +                                    raw_desc7, 1);
>>> +                   raw_desc4_5 =
>>> +                           _mm256_inserti128_si256
>>> +
>>      (_mm256_castsi128_si256(raw_desc4),
>>> +                                    raw_desc5, 1);
>>> +                   raw_desc2_3 =
>>> +                           _mm256_inserti128_si256
>>> +
>>      (_mm256_castsi128_si256(raw_desc2),
>>> +                                    raw_desc3, 1);
>>> +                   raw_desc0_1 =
>>> +                           _mm256_inserti128_si256
>>> +
>>      (_mm256_castsi128_si256(raw_desc0),
>>> +                                    raw_desc1, 1);
>>> +           } while (0);
>>
>> Is this to provide the proper indention because of the above #ifdef block? If
>> so why not simple { } for the scope, is do{ }while(0) has benefit against it?
> Yes, it's for the indention. To my opinion, "do while" looks friendly to the 
> readers as we always use it in the macros. Only "{}" looks missing a function 
> name or a "for ()" :)
> 

I found '{ }' more clear but no strong opinion, perhaps a comment to clarify to
intention can be good but that also looks like optional, so up to you.

Reply via email to