Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <03348775-8F88-452A-A44C-700E030224F4@gmail.com>
Date: Tue, 15 Sep 2015 23:42:41 +0800
From: Lei Zhang <zhanglei.april@...il.com>
To: john-dev@...ts.openwall.com
Subject: Re: Strict aliasing in SIMD code

Sorry for the duplication of my message... Google service is really unstable in China mainland. My mail client sometimes won't work properly with Gmail.


Lei

> On Sep 15, 2015, at 11:33 PM, Lei Zhang <zhanglei.april@...il.com> wrote:
> 
> Hey guys,
> 
> I was thinking about polishing the pseudo-intrinsics for NEON and AltiVec when this topic came to me. We've discussed it before, but I don't think we've really fixed this issue in JtR so far. I found an interesting SO link that's related to our problem and might be worth reading: http://stackoverflow.com/questions/24787268/how-to-implement-mm-storeu-epi64-without-aliasing-problems <http://stackoverflow.com/questions/24787268/how-to-implement-mm-storeu-epi64-without-aliasing-problems>
> 
> Hinted by the above link, I checked the headers of gcc (5.2.0), and it do use the __may_alias__ attribute when declaring vector types:
> 
> (from avx512fintrin.h)
> /* The Intel API is flexible enough that we must allow aliasing with other
>    vector types, and their scalar components.  */
> typedef float __m512 __attribute__ ((__vector_size__ (64), __may_alias__));
> typedef long long __m512i __attribute__ ((__vector_size__ (64), __may_alias__));
> typedef double __m512d __attribute__ ((__vector_size__ (64), __may_alias__));
> 
> clang's header also used this attribute in its intrinsics-related headers, but in a different way, like this one (also from avx512fintrin.h):
> 
> static __inline __m512d __attribute__((__always_inline__, __nodebug__))
> _mm512_loadu_pd(double const *__p)
> {
>   struct __loadu_pd {
>     __m512d __v;
>   } __attribute__((packed, may_alias));
>   return ((struct __loadu_pd*)__p)->__v;
> }
> 
> icc doesn't use this attribute, but I don't it's a problem for icc, since it's the most authoritative adopter of x86 intrinsics. I haven't checked MSVC++ yet.
> 
> Maybe we need not worry about strict-aliasing anymore when using SIMD intrinsics, as (most) compilers are already taking care of this issue for us.
> 
> 
> Lei


Content of type "text/html" skipped

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.