blob: 07c33e3435905430e150a86cd13a2a9f4964350c [file] [log] [blame]
NAKAMURA Takumib5f8f072011-09-16 03:55:36 +00001// RUN: %clang_cc1 -ffreestanding -triple i386-apple-darwin9 -target-cpu pentium4 -target-feature +sse4.1 -g -emit-llvm %s -o - | FileCheck %s
Eli Friedman7c06f6b2011-09-15 23:15:27 +00002
3#include <emmintrin.h>
Craig Topper52289822012-03-30 05:41:28 +00004#include <smmintrin.h>
Eli Friedman7c06f6b2011-09-15 23:15:27 +00005
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
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
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
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
34void 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
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
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
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
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
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
70void 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
76void 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
83void 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
89void 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
95void 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
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}
Craig Topper52289822012-03-30 05:41:28 +0000106
107__m128i test_mm_minpos_epu16(__m128i x) {
108 return _mm_minpos_epu16(x);
109}