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