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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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