1 // RUN: %clang_cc1 -ffreestanding -triple i386-apple-darwin9 -target-cpu pentium4 -target-feature +sse4.1 -g -emit-llvm %s -o - | FileCheck %s
2
3 #include <emmintrin.h>
4 #include <smmintrin.h>
5
test_loadl_pi(__m128 x,void * y)6 __m128 test_loadl_pi(__m128 x, void* y) {
7 // CHECK: define {{.*}} @test_loadl_pi
8 // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
9 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
10 // CHECK: shufflevector {{.*}} <4 x i32> <i32 4, i32 5, i32 2, i32 3>
11 return _mm_loadl_pi(x,y);
12 }
13
test_loadh_pi(__m128 x,void * y)14 __m128 test_loadh_pi(__m128 x, void* y) {
15 // CHECK: define {{.*}} @test_loadh_pi
16 // CHECK: load <2 x float>* {{.*}}, align 1{{$}}
17 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1
18 // CHECK: shufflevector {{.*}} <4 x i32> <i32 0, i32 1, i32 4, i32 5>
19 return _mm_loadh_pi(x,y);
20 }
21
test_load_ss(void * y)22 __m128 test_load_ss(void* y) {
23 // CHECK: define {{.*}} @test_load_ss
24 // CHECK: load float* {{.*}}, align 1{{$}}
25 return _mm_load_ss(y);
26 }
27
test_load1_ps(void * y)28 __m128 test_load1_ps(void* y) {
29 // CHECK: define {{.*}} @test_load1_ps
30 // CHECK: load float* {{.*}}, align 1{{$}}
31 return _mm_load1_ps(y);
32 }
33
test_store_ss(__m128 x,void * y)34 void test_store_ss(__m128 x, void* y) {
35 // CHECK: define void @test_store_ss
36 // CHECK: store {{.*}} float* {{.*}}, align 1,
37 _mm_store_ss(y, x);
38 }
39
test_load1_pd(__m128 x,void * y)40 __m128d test_load1_pd(__m128 x, void* y) {
41 // CHECK: define {{.*}} @test_load1_pd
42 // CHECK: load double* {{.*}}, align 1{{$}}
43 return _mm_load1_pd(y);
44 }
45
test_loadr_pd(__m128 x,void * y)46 __m128d test_loadr_pd(__m128 x, void* y) {
47 // CHECK: define {{.*}} @test_loadr_pd
48 // CHECK: load <2 x double>* {{.*}}, align 16{{$}}
49 return _mm_loadr_pd(y);
50 }
51
test_load_sd(void * y)52 __m128d test_load_sd(void* y) {
53 // CHECK: define {{.*}} @test_load_sd
54 // CHECK: load double* {{.*}}, align 1{{$}}
55 return _mm_load_sd(y);
56 }
57
test_loadh_pd(__m128d x,void * y)58 __m128d test_loadh_pd(__m128d x, void* y) {
59 // CHECK: define {{.*}} @test_loadh_pd
60 // CHECK: load double* {{.*}}, align 1{{$}}
61 return _mm_loadh_pd(x, y);
62 }
63
test_loadl_pd(__m128d x,void * y)64 __m128d test_loadl_pd(__m128d x, void* y) {
65 // CHECK: define {{.*}} @test_loadl_pd
66 // CHECK: load double* {{.*}}, align 1{{$}}
67 return _mm_loadl_pd(x, y);
68 }
69
test_store_sd(__m128d x,void * y)70 void test_store_sd(__m128d x, void* y) {
71 // CHECK: define void @test_store_sd
72 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
73 _mm_store_sd(y, x);
74 }
75
test_store1_pd(__m128d x,void * y)76 void test_store1_pd(__m128d x, void* y) {
77 // CHECK: define void @test_store1_pd
78 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
79 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
80 _mm_store1_pd(y, x);
81 }
82
test_storer_pd(__m128d x,void * y)83 void test_storer_pd(__m128d x, void* y) {
84 // CHECK: define void @test_storer_pd
85 // CHECK: store {{.*}} <2 x double>* {{.*}}, align 16{{$}}
86 _mm_storer_pd(y, x);
87 }
88
test_storeh_pd(__m128d x,void * y)89 void test_storeh_pd(__m128d x, void* y) {
90 // CHECK: define void @test_storeh_pd
91 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
92 _mm_storeh_pd(y, x);
93 }
94
test_storel_pd(__m128d x,void * y)95 void test_storel_pd(__m128d x, void* y) {
96 // CHECK: define void @test_storel_pd
97 // CHECK: store {{.*}} double* {{.*}}, align 1{{$}}
98 _mm_storel_pd(y, x);
99 }
100
test_loadl_epi64(void * y)101 __m128i test_loadl_epi64(void* y) {
102 // CHECK: define {{.*}} @test_loadl_epi64
103 // CHECK: load i64* {{.*}}, align 1{{$}}
104 return _mm_loadl_epi64(y);
105 }
106
test_mm_minpos_epu16(__m128i x)107 __m128i test_mm_minpos_epu16(__m128i x) {
108 // CHECK: define {{.*}} @test_mm_minpos_epu16
109 // CHECK: @llvm.x86.sse41.phminposuw
110 return _mm_minpos_epu16(x);
111 }
112
test_mm_mpsadbw_epu8(__m128i x,__m128i y)113 __m128i test_mm_mpsadbw_epu8(__m128i x, __m128i y) {
114 // CHECK: define {{.*}} @test_mm_mpsadbw_epu8
115 // CHECK: @llvm.x86.sse41.mpsadbw
116 return _mm_mpsadbw_epu8(x, y, 1);
117 }
118
test_mm_dp_ps(__m128 x,__m128 y)119 __m128 test_mm_dp_ps(__m128 x, __m128 y) {
120 // CHECK: define {{.*}} @test_mm_dp_ps
121 // CHECK: @llvm.x86.sse41.dpps
122 return _mm_dp_ps(x, y, 2);
123 }
124
test_mm_dp_pd(__m128d x,__m128d y)125 __m128d test_mm_dp_pd(__m128d x, __m128d y) {
126 // CHECK: define {{.*}} @test_mm_dp_pd
127 // CHECK: @llvm.x86.sse41.dppd
128 return _mm_dp_pd(x, y, 2);
129 }
130
test_mm_round_ps(__m128 x)131 __m128 test_mm_round_ps(__m128 x) {
132 // CHECK: define {{.*}} @test_mm_round_ps
133 // CHECK: @llvm.x86.sse41.round.ps
134 return _mm_round_ps(x, 2);
135 }
136
test_mm_round_ss(__m128 x,__m128 y)137 __m128 test_mm_round_ss(__m128 x, __m128 y) {
138 // CHECK: define {{.*}} @test_mm_round_ss
139 // CHECK: @llvm.x86.sse41.round.ss
140 return _mm_round_ss(x, y, 2);
141 }
142
test_mm_round_pd(__m128d x)143 __m128d test_mm_round_pd(__m128d x) {
144 // CHECK: define {{.*}} @test_mm_round_pd
145 // CHECK: @llvm.x86.sse41.round.pd
146 return _mm_round_pd(x, 2);
147 }
148
test_mm_round_sd(__m128d x,__m128d y)149 __m128d test_mm_round_sd(__m128d x, __m128d y) {
150 // CHECK: define {{.*}} @test_mm_round_sd
151 // CHECK: @llvm.x86.sse41.round.sd
152 return _mm_round_sd(x, y, 2);
153 }
154