The attached patch changes the last step of _mm_cvtps_pi16, which is a
function that converts four single precision floating point values into
four signed 16-bit integers, to use _mm_packs_pi32 instead of
_mm_packs_pi16.

<rdar://problem/16873717>

The following program miscompiles without the fix:

#include <xmmintrin.h>

#include <stdio.h>


int main(int argc, char **argv)

{

  __m128 test2 = _mm_setr_ps(10.0f, 100.0f, 200.0f, 300.0f);

  __m64 result = _mm_cvtps_pi16(test2);


  // wrong value: 0x007f007f0064000a

  // proper value: 0x012c00c80064000a

  printf("%llx\n", result);


  return 0;

}

Attachment: xmmintrin1.patch
Description: Binary data

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to