• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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