summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r266674-clang-r209489-fix-xmmintrin.diff
blob: 78473aa26a1f4065246cf2618e7a110d1b3fae78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Pull in r209489 from upstream clang trunk (by Akira Hatanaka):

  Fix a bug in xmmintrin.h.

  The last step of _mm_cvtps_pi16 should use _mm_packs_pi32, which is a function
  that reads two __m64 values and packs four 32-bit values into four 16-bit
  values.  

  <rdar://problem/16873717>

Pull in r209559 from upstream clang trunk (by Akira Hatanaka):

  Recommit r209532 with -ffreestanding.

  This is a test case for r209489.

Introduced here: http://svnweb.freebsd.org/changeset/base/266674

Index: tools/clang/lib/Headers/xmmintrin.h
===================================================================
--- tools/clang/lib/Headers/xmmintrin.h
+++ tools/clang/lib/Headers/xmmintrin.h
@@ -903,7 +903,7 @@ _mm_cvtps_pi16(__m128 __a)
   __a = _mm_movehl_ps(__a, __a);
   __c = _mm_cvtps_pi32(__a);
   
-  return _mm_packs_pi16(__b, __c);
+  return _mm_packs_pi32(__b, __c);
 }
 
 static __inline__ __m64 __attribute__((__always_inline__, __nodebug__))
Index: tools/clang/test/Headers/xmmintrin.c
===================================================================
--- tools/clang/test/Headers/xmmintrin.c
+++ tools/clang/test/Headers/xmmintrin.c
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 %s -ffreestanding -triple x86_64-apple-macosx10.9.0 -emit-llvm -o - | FileCheck %s
+
+#include <xmmintrin.h>
+
+// Make sure the last step of _mm_cvtps_pi16 converts <4 x i32> to <4 x i16> by
+// checking that clang emits PACKSSDW instead of PACKSSWB.
+
+// CHECK: define i64 @test_mm_cvtps_pi16
+// CHECK: call x86_mmx @llvm.x86.mmx.packssdw
+
+__m64 test_mm_cvtps_pi16(__m128 a) {
+  return _mm_cvtps_pi16(a);
+}
OpenPOWER on IntegriCloud