ddbe93418d
Under certain conditions GCC on x86 decides to copy simd128_value_t through FPU stack. For example Int32x4::value getter would contain the following code: 212d5: d9 46 07 fld DWORD PTR [esi+0x7] 212d8: d9 46 0b fld DWORD PTR [esi+0xb] 212db: 8b 46 03 mov eax,DWORD PTR [esi+0x3] 212de: d9 46 0f fld DWORD PTR [esi+0xf] 212e1: d9 ca fxch st(2) 212e3: d9 5b 04 fstp DWORD PTR [ebx+0x4] 212e6: d9 5b 08 fstp DWORD PTR [ebx+0x8] 212e9: 89 03 mov DWORD PTR [ebx],eax 212eb: d9 5b 0c fstp DWORD PTR [ebx+0xc] This code is incorrect. For example an attempt to copy an int32_t value that looks like sNaN will result in it turning into a qNaN which changes the value being copied. GCC bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58416 This was causing flakiness when people were running WebSocket related tests locally on Dart VM binaries built with GCC as our WebSocket implementation uses Int32x4 values to speed up payload masking/unmasking. Bots were not affected because they are building with clang. BUG=http://dartbug.com/21220 R=johnmccutchan@google.com Review URL: https://codereview.chromium.org//692703003 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@41581 260f80e4-7a28-3924-810f-c04153c831b5