1266675SdimPull in r209489 from upstream clang trunk (by Akira Hatanaka): 2266675Sdim 3266675Sdim Fix a bug in xmmintrin.h. 4266675Sdim 5266675Sdim The last step of _mm_cvtps_pi16 should use _mm_packs_pi32, which is a function 6266675Sdim that reads two __m64 values and packs four 32-bit values into four 16-bit 7266675Sdim values. 8266675Sdim 9266675Sdim <rdar://problem/16873717> 10266675Sdim 11266675SdimPull in r209559 from upstream clang trunk (by Akira Hatanaka): 12266675Sdim 13266675Sdim Recommit r209532 with -ffreestanding. 14266675Sdim 15266675Sdim This is a test case for r209489. 16266675Sdim 17266675SdimIntroduced here: http://svnweb.freebsd.org/changeset/base/266674 18266675Sdim 19266675SdimIndex: tools/clang/lib/Headers/xmmintrin.h 20266675Sdim=================================================================== 21266675Sdim--- tools/clang/lib/Headers/xmmintrin.h 22266675Sdim+++ tools/clang/lib/Headers/xmmintrin.h 23266675Sdim@@ -903,7 +903,7 @@ _mm_cvtps_pi16(__m128 __a) 24266675Sdim __a = _mm_movehl_ps(__a, __a); 25266675Sdim __c = _mm_cvtps_pi32(__a); 26266675Sdim 27266675Sdim- return _mm_packs_pi16(__b, __c); 28266675Sdim+ return _mm_packs_pi32(__b, __c); 29266675Sdim } 30266675Sdim 31266675Sdim static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) 32266675SdimIndex: tools/clang/test/Headers/xmmintrin.c 33266675Sdim=================================================================== 34266675Sdim--- tools/clang/test/Headers/xmmintrin.c 35266675Sdim+++ tools/clang/test/Headers/xmmintrin.c 36266675Sdim@@ -0,0 +1,13 @@ 37266675Sdim+// RUN: %clang_cc1 %s -ffreestanding -triple x86_64-apple-macosx10.9.0 -emit-llvm -o - | FileCheck %s 38266675Sdim+ 39266675Sdim+#include <xmmintrin.h> 40266675Sdim+ 41266675Sdim+// Make sure the last step of _mm_cvtps_pi16 converts <4 x i32> to <4 x i16> by 42266675Sdim+// checking that clang emits PACKSSDW instead of PACKSSWB. 43266675Sdim+ 44266675Sdim+// CHECK: define i64 @test_mm_cvtps_pi16 45266675Sdim+// CHECK: call x86_mmx @llvm.x86.mmx.packssdw 46266675Sdim+ 47266675Sdim+__m64 test_mm_cvtps_pi16(__m128 a) { 48266675Sdim+ return _mm_cvtps_pi16(a); 49266675Sdim+} 50