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

David Zmick <dpzmick at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dpzmick at gmail dot com

--- Comment #2 from David Zmick <dpzmick at gmail dot com> ---
I'd like to add that we are seeing assertion fail because of the interaction
between MMX and the "long double" used in unordered_map's _M_need_rehash.

long double is forcing the use of the FPU, but the MMX instructions emitted are
wiping out the state of the FPU registers. Adding the an explicit _mm_empty (or
disabling MMX) solves the problem because it eliminates the bad interaction
with the long double in _M_need_rehash.

I'm not sure if there's a good way for developers to know when they need to add
(potentially expensive) calls to _mm_empty to vector code like this, so I feel
like I'd be less surprised if the compiler cleaned up after itself if it uses
MMX for code like this (and leave me with a performance problem to debug) than
if I ended up with the polluted FPU unexpectedly.

Reply via email to