[Bug sanitizer/84508] Load of misaligned address using _mm_load_sd

noloader at gmail dot com gcc-bugzilla@gcc.gnu.org
Sat Feb 24 17:38:00 GMT 2018


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84508

--- Comment #8 from Jeffrey Walton <noloader at gmail dot com> ---
(In reply to Jeffrey Walton from comment #0)
> According to Intel
> (https://software.intel.com/sites/landingpage/IntrinsicsGuide), there are no
> alignment requirements for _mm_load_sd, _mm_store_sd and _mm_loaddup_pd. For
> example, from _mm_load_sd:
> 
>   Description
> 
>     Load a double-precision (64-bit) floating-point element from
>     memory into the lower of dst, and zero the upper element.
>     mem_addr does not need to be aligned on any particular boundary.

The opening sentence was incorrect. The *_sd functions do not have alignment
requirements. Searching through the Intrinsic Guide reveals the following
functions do not have the alignment requirements:

  * _mm_load_sd
  * _mm_store_sd
  * _mm_load_ss
  * _mm_loadh_pi
  * _mm_loadl_pd
  * _mm_loadl_pi
  * _mm_loadu_pd
  * _mm_loadu_ps
  * _mm_loadu_si128

  * _mm_store_sd
  * _mm_store_ss
  * _mm_storeu_pd
  * _mm_storeu_ps
  * _mm_storeu_si128

All the functions listed above specifically state "mem_addr does not need to be
aligned on any particular boundary."

The remaining functions have natural alignment or 16-byte alignment
requirements.


More information about the Gcc-bugs mailing list