xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/sse-intrinsics-fast-isel.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=i386-unknown-unknown -mattr=+sse | FileCheck %s --check-prefix=ALL --check-prefix=X32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -fast-isel -mtriple=x86_64-unknown-unknown -mattr=+sse,-sse2 | FileCheck %s --check-prefix=ALL --check-prefix=X64
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; NOTE: This should use IR equivalent to what is generated by clang/test/CodeGen/sse-builtins.c
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_add_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
8*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_add_ps:
9*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    addps %xmm1, %xmm0
11*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
12*9880d681SAndroid Build Coastguard Worker;
13*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_add_ps:
14*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
15*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    addps %xmm1, %xmm0
16*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
17*9880d681SAndroid Build Coastguard Worker  %res = fadd <4 x float> %a0, %a1
18*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
19*9880d681SAndroid Build Coastguard Worker}
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_add_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
22*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_add_ss:
23*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
24*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    addss %xmm1, %xmm0
25*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
26*9880d681SAndroid Build Coastguard Worker;
27*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_add_ss:
28*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
29*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    addss %xmm1, %xmm0
30*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
31*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %a0, i32 0
32*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a1, i32 0
33*9880d681SAndroid Build Coastguard Worker  %fadd = fadd float %ext0, %ext1
34*9880d681SAndroid Build Coastguard Worker  %res = insertelement <4 x float> %a0, float %fadd, i32 0
35*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_and_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
39*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_and_ps:
40*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
41*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebp
42*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esp, %ebp
43*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %esi
44*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-16, %esp
45*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subl $64, %esp
46*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)
47*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
48*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
49*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
50*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
51*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)
52*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %esi
53*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esi, (%esp)
54*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %edx
55*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, {{[0-9]+}}(%esp)
56*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %eax
57*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
58*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %ecx
59*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
60*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
61*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
62*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
63*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
64*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
65*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
66*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
67*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal -4(%ebp), %esp
68*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %esi
69*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebp
70*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
71*9880d681SAndroid Build Coastguard Worker;
72*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_and_ps:
73*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
74*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
75*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
76*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %r8
77*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
78*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rdx
79*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rdx, %rsi
80*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %eax, %edx
81*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rax
82*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx
83*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rcx, %rdi
84*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %r8d, %ecx
85*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %r8
86*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rsi
87*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rdi
88*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
89*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
90*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %r8d, %edi
91*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
92*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %eax, %esi
93*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, -{{[0-9]+}}(%rsp)
94*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
95*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
96*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
97*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
98*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
99*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
100*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
101*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
102*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <4 x float> %a0 to <4 x i32>
103*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <4 x float> %a1 to <4 x i32>
104*9880d681SAndroid Build Coastguard Worker  %res = and <4 x i32> %arg0, %arg1
105*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <4 x float>
106*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %bc
107*9880d681SAndroid Build Coastguard Worker}
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_andnot_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
110*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_andnot_ps:
111*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
112*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebp
113*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esp, %ebp
114*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %esi
115*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-16, %esp
116*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subl $64, %esp
117*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)
118*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
119*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
120*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
121*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
122*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)
123*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    notl %edx
124*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    notl %ecx
125*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    notl %esi
126*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    notl %eax
127*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %eax
128*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %eax, (%esp)
129*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %esi
130*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esi, {{[0-9]+}}(%esp)
131*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %ecx
132*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
133*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl {{[0-9]+}}(%esp), %edx
134*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, {{[0-9]+}}(%esp)
135*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
136*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
137*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
138*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
139*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
140*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
141*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
142*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal -4(%ebp), %esp
143*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %esi
144*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebp
145*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
146*9880d681SAndroid Build Coastguard Worker;
147*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_andnot_ps:
148*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
149*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
150*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
151*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx
152*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rcx, %rdx
153*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rdx
154*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rax, %rsi
155*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rsi
156*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
157*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rdi
158*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %r8
159*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    notl %eax
160*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %edi, %eax
161*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rdi
162*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    notl %ecx
163*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %r8d, %ecx
164*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %r8
165*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    notl %esi
166*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    notl %edx
167*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
168*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
169*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %r8d, %edx
170*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
171*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl %edi, %esi
172*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, -{{[0-9]+}}(%rsp)
173*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
174*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
175*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
176*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
177*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
178*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
179*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
180*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
181*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <4 x float> %a0 to <4 x i32>
182*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <4 x float> %a1 to <4 x i32>
183*9880d681SAndroid Build Coastguard Worker  %not = xor <4 x i32> %arg0, <i32 -1, i32 -1, i32 -1, i32 -1>
184*9880d681SAndroid Build Coastguard Worker  %res = and <4 x i32> %not, %arg1
185*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <4 x float>
186*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %bc
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpeq_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
190*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpeq_ps:
191*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
192*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpeqps %xmm1, %xmm0
193*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
194*9880d681SAndroid Build Coastguard Worker;
195*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpeq_ps:
196*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
197*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpeqps %xmm1, %xmm0
198*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
199*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq <4 x float> %a0, %a1
200*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
201*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
202*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
203*9880d681SAndroid Build Coastguard Worker}
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpeq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
206*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpeq_ss:
207*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
208*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpeqss %xmm1, %xmm0
209*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
210*9880d681SAndroid Build Coastguard Worker;
211*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpeq_ss:
212*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
213*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpeqss %xmm1, %xmm0
214*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
215*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 0)
216*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
217*9880d681SAndroid Build Coastguard Worker}
218*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.cmp.ss(<4 x float>, <4 x float>, i8) nounwind readnone
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpge_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
221*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpge_ps:
222*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
223*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpleps %xmm0, %xmm1
224*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, %xmm0
225*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
226*9880d681SAndroid Build Coastguard Worker;
227*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpge_ps:
228*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
229*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpleps %xmm0, %xmm1
230*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, %xmm0
231*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
232*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole <4 x float> %a1, %a0
233*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
234*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
235*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
236*9880d681SAndroid Build Coastguard Worker}
237*9880d681SAndroid Build Coastguard Worker
238*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpge_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
239*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpge_ss:
240*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
241*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpless %xmm0, %xmm1
242*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
243*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
244*9880d681SAndroid Build Coastguard Worker;
245*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpge_ss:
246*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
247*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpless %xmm0, %xmm1
248*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
249*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
250*9880d681SAndroid Build Coastguard Worker  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 2)
251*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
252*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
253*9880d681SAndroid Build Coastguard Worker}
254*9880d681SAndroid Build Coastguard Worker
255*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpgt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
256*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpgt_ps:
257*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
258*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpltps %xmm0, %xmm1
259*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, %xmm0
260*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
261*9880d681SAndroid Build Coastguard Worker;
262*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpgt_ps:
263*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
264*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpltps %xmm0, %xmm1
265*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, %xmm0
266*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
267*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt <4 x float> %a1, %a0
268*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
269*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
270*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpgt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
274*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpgt_ss:
275*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
276*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpltss %xmm0, %xmm1
277*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
278*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
279*9880d681SAndroid Build Coastguard Worker;
280*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpgt_ss:
281*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
282*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpltss %xmm0, %xmm1
283*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
284*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
285*9880d681SAndroid Build Coastguard Worker  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 1)
286*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
287*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
288*9880d681SAndroid Build Coastguard Worker}
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmple_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
291*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmple_ps:
292*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
293*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpleps %xmm1, %xmm0
294*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
295*9880d681SAndroid Build Coastguard Worker;
296*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmple_ps:
297*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
298*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpleps %xmm1, %xmm0
299*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
300*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ole <4 x float> %a0, %a1
301*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
302*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
303*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
304*9880d681SAndroid Build Coastguard Worker}
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmple_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
307*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmple_ss:
308*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
309*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpless %xmm1, %xmm0
310*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
311*9880d681SAndroid Build Coastguard Worker;
312*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmple_ss:
313*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
314*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpless %xmm1, %xmm0
315*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
316*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 2)
317*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
318*9880d681SAndroid Build Coastguard Worker}
319*9880d681SAndroid Build Coastguard Worker
320*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmplt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
321*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmplt_ps:
322*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
323*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpltps %xmm1, %xmm0
324*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
325*9880d681SAndroid Build Coastguard Worker;
326*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmplt_ps:
327*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
328*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpltps %xmm1, %xmm0
329*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
330*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt <4 x float> %a0, %a1
331*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
332*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
333*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
334*9880d681SAndroid Build Coastguard Worker}
335*9880d681SAndroid Build Coastguard Worker
336*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmplt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
337*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmplt_ss:
338*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
339*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpltss %xmm1, %xmm0
340*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
341*9880d681SAndroid Build Coastguard Worker;
342*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmplt_ss:
343*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
344*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpltss %xmm1, %xmm0
345*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
346*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 1)
347*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
348*9880d681SAndroid Build Coastguard Worker}
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpneq_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
351*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpneq_ps:
352*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
353*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpneqps %xmm1, %xmm0
354*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
355*9880d681SAndroid Build Coastguard Worker;
356*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpneq_ps:
357*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
358*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpneqps %xmm1, %xmm0
359*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
360*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp une <4 x float> %a0, %a1
361*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
362*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
363*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
364*9880d681SAndroid Build Coastguard Worker}
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpneq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
367*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpneq_ss:
368*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
369*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpneqss %xmm1, %xmm0
370*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
371*9880d681SAndroid Build Coastguard Worker;
372*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpneq_ss:
373*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
374*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpneqss %xmm1, %xmm0
375*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
376*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 4)
377*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
378*9880d681SAndroid Build Coastguard Worker}
379*9880d681SAndroid Build Coastguard Worker
380*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpnge_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
381*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpnge_ps:
382*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
383*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnleps %xmm0, %xmm1
384*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, %xmm0
385*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
386*9880d681SAndroid Build Coastguard Worker;
387*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpnge_ps:
388*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
389*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnleps %xmm0, %xmm1
390*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, %xmm0
391*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
392*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ugt <4 x float> %a1, %a0
393*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
394*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
395*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
396*9880d681SAndroid Build Coastguard Worker}
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpnge_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
399*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpnge_ss:
400*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
401*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnless %xmm0, %xmm1
402*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
403*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
404*9880d681SAndroid Build Coastguard Worker;
405*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpnge_ss:
406*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
407*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnless %xmm0, %xmm1
408*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
409*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
410*9880d681SAndroid Build Coastguard Worker  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 6)
411*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
412*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
413*9880d681SAndroid Build Coastguard Worker}
414*9880d681SAndroid Build Coastguard Worker
415*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpngt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
416*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpngt_ps:
417*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
418*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnltps %xmm0, %xmm1
419*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, %xmm0
420*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
421*9880d681SAndroid Build Coastguard Worker;
422*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpngt_ps:
423*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
424*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnltps %xmm0, %xmm1
425*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, %xmm0
426*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
427*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uge <4 x float> %a1, %a0
428*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
429*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
430*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
431*9880d681SAndroid Build Coastguard Worker}
432*9880d681SAndroid Build Coastguard Worker
433*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpngt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
434*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpngt_ss:
435*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
436*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnltss %xmm0, %xmm1
437*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
438*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
439*9880d681SAndroid Build Coastguard Worker;
440*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpngt_ss:
441*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
442*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnltss %xmm0, %xmm1
443*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
444*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
445*9880d681SAndroid Build Coastguard Worker  %cmp = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a1, <4 x float> %a0, i8 5)
446*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %cmp, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
447*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
448*9880d681SAndroid Build Coastguard Worker}
449*9880d681SAndroid Build Coastguard Worker
450*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpnle_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
451*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpnle_ps:
452*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
453*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnleps %xmm1, %xmm0
454*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
455*9880d681SAndroid Build Coastguard Worker;
456*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpnle_ps:
457*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
458*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnleps %xmm1, %xmm0
459*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
460*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ugt <4 x float> %a0, %a1
461*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
462*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
463*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
464*9880d681SAndroid Build Coastguard Worker}
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpnle_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
467*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpnle_ss:
468*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
469*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnless %xmm1, %xmm0
470*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
471*9880d681SAndroid Build Coastguard Worker;
472*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpnle_ss:
473*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
474*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnless %xmm1, %xmm0
475*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
476*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 6)
477*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
478*9880d681SAndroid Build Coastguard Worker}
479*9880d681SAndroid Build Coastguard Worker
480*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpnlt_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
481*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpnlt_ps:
482*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
483*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnltps %xmm1, %xmm0
484*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
485*9880d681SAndroid Build Coastguard Worker;
486*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpnlt_ps:
487*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
488*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnltps %xmm1, %xmm0
489*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
490*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uge <4 x float> %a0, %a1
491*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
492*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
493*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
494*9880d681SAndroid Build Coastguard Worker}
495*9880d681SAndroid Build Coastguard Worker
496*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpnlt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
497*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpnlt_ss:
498*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
499*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpnltss %xmm1, %xmm0
500*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
501*9880d681SAndroid Build Coastguard Worker;
502*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpnlt_ss:
503*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
504*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpnltss %xmm1, %xmm0
505*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
506*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 5)
507*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
508*9880d681SAndroid Build Coastguard Worker}
509*9880d681SAndroid Build Coastguard Worker
510*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpord_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
511*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpord_ps:
512*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
513*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpordps %xmm1, %xmm0
514*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
515*9880d681SAndroid Build Coastguard Worker;
516*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpord_ps:
517*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
518*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpordps %xmm1, %xmm0
519*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
520*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ord <4 x float> %a0, %a1
521*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
522*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
523*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
524*9880d681SAndroid Build Coastguard Worker}
525*9880d681SAndroid Build Coastguard Worker
526*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpord_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
527*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpord_ss:
528*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
529*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpordss %xmm1, %xmm0
530*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
531*9880d681SAndroid Build Coastguard Worker;
532*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpord_ss:
533*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
534*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpordss %xmm1, %xmm0
535*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
536*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 7)
537*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
538*9880d681SAndroid Build Coastguard Worker}
539*9880d681SAndroid Build Coastguard Worker
540*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpunord_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
541*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpunord_ps:
542*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
543*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpunordps %xmm1, %xmm0
544*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
545*9880d681SAndroid Build Coastguard Worker;
546*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpunord_ps:
547*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
548*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpunordps %xmm1, %xmm0
549*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
550*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp uno <4 x float> %a0, %a1
551*9880d681SAndroid Build Coastguard Worker  %sext = sext <4 x i1> %cmp to <4 x i32>
552*9880d681SAndroid Build Coastguard Worker  %res = bitcast <4 x i32> %sext to <4 x float>
553*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
554*9880d681SAndroid Build Coastguard Worker}
555*9880d681SAndroid Build Coastguard Worker
556*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cmpunord_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
557*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cmpunord_ss:
558*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
559*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cmpunordss %xmm1, %xmm0
560*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
561*9880d681SAndroid Build Coastguard Worker;
562*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cmpunord_ss:
563*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
564*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cmpunordss %xmm1, %xmm0
565*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
566*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.cmp.ss(<4 x float> %a0, <4 x float> %a1, i8 3)
567*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
568*9880d681SAndroid Build Coastguard Worker}
569*9880d681SAndroid Build Coastguard Worker
570*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_comieq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
571*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_comieq_ss:
572*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
573*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    comiss %xmm1, %xmm0
574*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setnp %al
575*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sete %cl
576*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andb %al, %cl
577*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzbl %cl, %eax
578*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
579*9880d681SAndroid Build Coastguard Worker;
580*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_comieq_ss:
581*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
582*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    comiss %xmm1, %xmm0
583*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setnp %al
584*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sete %cl
585*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andb %al, %cl
586*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movzbl %cl, %eax
587*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
588*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.comieq.ss(<4 x float> %a0, <4 x float> %a1)
589*9880d681SAndroid Build Coastguard Worker  ret i32 %res
590*9880d681SAndroid Build Coastguard Worker}
591*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.comieq.ss(<4 x float>, <4 x float>) nounwind readnone
592*9880d681SAndroid Build Coastguard Worker
593*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_comige_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
594*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_comige_ss:
595*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
596*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
597*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    comiss %xmm1, %xmm0
598*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setae %al
599*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
600*9880d681SAndroid Build Coastguard Worker;
601*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_comige_ss:
602*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
603*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
604*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    comiss %xmm1, %xmm0
605*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setae %al
606*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
607*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.comige.ss(<4 x float> %a0, <4 x float> %a1)
608*9880d681SAndroid Build Coastguard Worker  ret i32 %res
609*9880d681SAndroid Build Coastguard Worker}
610*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.comige.ss(<4 x float>, <4 x float>) nounwind readnone
611*9880d681SAndroid Build Coastguard Worker
612*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_comigt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
613*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_comigt_ss:
614*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
615*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
616*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    comiss %xmm1, %xmm0
617*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
618*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
619*9880d681SAndroid Build Coastguard Worker;
620*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_comigt_ss:
621*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
622*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
623*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    comiss %xmm1, %xmm0
624*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
625*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
626*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.comigt.ss(<4 x float> %a0, <4 x float> %a1)
627*9880d681SAndroid Build Coastguard Worker  ret i32 %res
628*9880d681SAndroid Build Coastguard Worker}
629*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.comigt.ss(<4 x float>, <4 x float>) nounwind readnone
630*9880d681SAndroid Build Coastguard Worker
631*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_comile_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
632*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_comile_ss:
633*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
634*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
635*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    comiss %xmm0, %xmm1
636*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setae %al
637*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
638*9880d681SAndroid Build Coastguard Worker;
639*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_comile_ss:
640*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
641*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
642*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    comiss %xmm0, %xmm1
643*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setae %al
644*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
645*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.comile.ss(<4 x float> %a0, <4 x float> %a1)
646*9880d681SAndroid Build Coastguard Worker  ret i32 %res
647*9880d681SAndroid Build Coastguard Worker}
648*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.comile.ss(<4 x float>, <4 x float>) nounwind readnone
649*9880d681SAndroid Build Coastguard Worker
650*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_comilt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
651*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_comilt_ss:
652*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
653*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
654*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    comiss %xmm0, %xmm1
655*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
656*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
657*9880d681SAndroid Build Coastguard Worker;
658*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_comilt_ss:
659*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
660*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
661*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    comiss %xmm0, %xmm1
662*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
663*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
664*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.comilt.ss(<4 x float> %a0, <4 x float> %a1)
665*9880d681SAndroid Build Coastguard Worker  ret i32 %res
666*9880d681SAndroid Build Coastguard Worker}
667*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.comilt.ss(<4 x float>, <4 x float>) nounwind readnone
668*9880d681SAndroid Build Coastguard Worker
669*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_comineq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
670*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_comineq_ss:
671*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
672*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    comiss %xmm1, %xmm0
673*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setp %al
674*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setne %cl
675*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orb %al, %cl
676*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzbl %cl, %eax
677*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
678*9880d681SAndroid Build Coastguard Worker;
679*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_comineq_ss:
680*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
681*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    comiss %xmm1, %xmm0
682*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setp %al
683*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setne %cl
684*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orb %al, %cl
685*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movzbl %cl, %eax
686*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
687*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.comineq.ss(<4 x float> %a0, <4 x float> %a1)
688*9880d681SAndroid Build Coastguard Worker  ret i32 %res
689*9880d681SAndroid Build Coastguard Worker}
690*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.comineq.ss(<4 x float>, <4 x float>) nounwind readnone
691*9880d681SAndroid Build Coastguard Worker
692*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cvt_ss2si(<4 x float> %a0) nounwind {
693*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvt_ss2si:
694*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
695*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cvtss2si %xmm0, %eax
696*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
697*9880d681SAndroid Build Coastguard Worker;
698*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvt_ss2si:
699*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
700*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cvtss2si %xmm0, %eax
701*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
702*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0)
703*9880d681SAndroid Build Coastguard Worker  ret i32 %res
704*9880d681SAndroid Build Coastguard Worker}
705*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.cvtss2si(<4 x float>) nounwind readnone
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_cvtsi32_ss(<4 x float> %a0, i32 %a1) nounwind {
708*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtsi32_ss:
709*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
710*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
711*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cvtsi2ssl %eax, %xmm1
712*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
713*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
714*9880d681SAndroid Build Coastguard Worker;
715*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtsi32_ss:
716*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
717*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cvtsi2ssl %edi, %xmm1
718*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
719*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
720*9880d681SAndroid Build Coastguard Worker  %cvt = sitofp i32 %a1 to float
721*9880d681SAndroid Build Coastguard Worker  %res = insertelement <4 x float> %a0, float %cvt, i32 0
722*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
723*9880d681SAndroid Build Coastguard Worker}
724*9880d681SAndroid Build Coastguard Worker
725*9880d681SAndroid Build Coastguard Workerdefine float @test_mm_cvtss_f32(<4 x float> %a0) nounwind {
726*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtss_f32:
727*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
728*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
729*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss %xmm0, (%esp)
730*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    flds (%esp)
731*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %eax
732*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
733*9880d681SAndroid Build Coastguard Worker;
734*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtss_f32:
735*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
736*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
737*9880d681SAndroid Build Coastguard Worker  %res = extractelement <4 x float> %a0, i32 0
738*9880d681SAndroid Build Coastguard Worker  ret float %res
739*9880d681SAndroid Build Coastguard Worker}
740*9880d681SAndroid Build Coastguard Worker
741*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cvtss_si32(<4 x float> %a0) nounwind {
742*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvtss_si32:
743*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
744*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cvtss2si %xmm0, %eax
745*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
746*9880d681SAndroid Build Coastguard Worker;
747*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvtss_si32:
748*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
749*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cvtss2si %xmm0, %eax
750*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
751*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.cvtss2si(<4 x float> %a0)
752*9880d681SAndroid Build Coastguard Worker  ret i32 %res
753*9880d681SAndroid Build Coastguard Worker}
754*9880d681SAndroid Build Coastguard Worker
755*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cvttss_si(<4 x float> %a0) nounwind {
756*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvttss_si:
757*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
758*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cvttss2si %xmm0, %eax
759*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
760*9880d681SAndroid Build Coastguard Worker;
761*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvttss_si:
762*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
763*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cvttss2si %xmm0, %eax
764*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
765*9880d681SAndroid Build Coastguard Worker  %cvt = extractelement <4 x float> %a0, i32 0
766*9880d681SAndroid Build Coastguard Worker  %res = fptosi float %cvt to i32
767*9880d681SAndroid Build Coastguard Worker  ret i32 %res
768*9880d681SAndroid Build Coastguard Worker}
769*9880d681SAndroid Build Coastguard Worker
770*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_cvttss_si32(<4 x float> %a0) nounwind {
771*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_cvttss_si32:
772*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
773*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    cvttss2si %xmm0, %eax
774*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
775*9880d681SAndroid Build Coastguard Worker;
776*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_cvttss_si32:
777*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
778*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    cvttss2si %xmm0, %eax
779*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
780*9880d681SAndroid Build Coastguard Worker  %cvt = extractelement <4 x float> %a0, i32 0
781*9880d681SAndroid Build Coastguard Worker  %res = fptosi float %cvt to i32
782*9880d681SAndroid Build Coastguard Worker  ret i32 %res
783*9880d681SAndroid Build Coastguard Worker}
784*9880d681SAndroid Build Coastguard Worker
785*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_div_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
786*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_div_ps:
787*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
788*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    divps %xmm1, %xmm0
789*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
790*9880d681SAndroid Build Coastguard Worker;
791*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_div_ps:
792*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
793*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    divps %xmm1, %xmm0
794*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
795*9880d681SAndroid Build Coastguard Worker  %res = fdiv <4 x float> %a0, %a1
796*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
797*9880d681SAndroid Build Coastguard Worker}
798*9880d681SAndroid Build Coastguard Worker
799*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_div_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
800*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_div_ss:
801*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
802*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    divss %xmm1, %xmm0
803*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
804*9880d681SAndroid Build Coastguard Worker;
805*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_div_ss:
806*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
807*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    divss %xmm1, %xmm0
808*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
809*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %a0, i32 0
810*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a1, i32 0
811*9880d681SAndroid Build Coastguard Worker  %fdiv = fdiv float %ext0, %ext1
812*9880d681SAndroid Build Coastguard Worker  %res = insertelement <4 x float> %a0, float %fdiv, i32 0
813*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
814*9880d681SAndroid Build Coastguard Worker}
815*9880d681SAndroid Build Coastguard Worker
816*9880d681SAndroid Build Coastguard Workerdefine i32 @test_MM_GET_EXCEPTION_MASK() nounwind {
817*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_GET_EXCEPTION_MASK:
818*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
819*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
820*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %eax
821*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%eax)
822*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %eax
823*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $8064, %eax # imm = 0x1F80
824*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ecx
825*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
826*9880d681SAndroid Build Coastguard Worker;
827*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_GET_EXCEPTION_MASK:
828*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
829*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
830*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
831*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
832*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $8064, %eax # imm = 0x1F80
833*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
834*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
835*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
836*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
837*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1, align 4
838*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, 8064
839*9880d681SAndroid Build Coastguard Worker  ret i32 %4
840*9880d681SAndroid Build Coastguard Worker}
841*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.sse.stmxcsr(i8*) nounwind readnone
842*9880d681SAndroid Build Coastguard Worker
843*9880d681SAndroid Build Coastguard Workerdefine i32 @test_MM_GET_EXCEPTION_STATE() nounwind {
844*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_GET_EXCEPTION_STATE:
845*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
846*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
847*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %eax
848*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%eax)
849*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %eax
850*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $63, %eax
851*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ecx
852*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
853*9880d681SAndroid Build Coastguard Worker;
854*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_GET_EXCEPTION_STATE:
855*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
856*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
857*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
858*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
859*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $63, %eax
860*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
861*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
862*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
863*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
864*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1, align 4
865*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, 63
866*9880d681SAndroid Build Coastguard Worker  ret i32 %4
867*9880d681SAndroid Build Coastguard Worker}
868*9880d681SAndroid Build Coastguard Worker
869*9880d681SAndroid Build Coastguard Workerdefine i32 @test_MM_GET_FLUSH_ZERO_MODE() nounwind {
870*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_GET_FLUSH_ZERO_MODE:
871*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
872*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
873*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %eax
874*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%eax)
875*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %eax
876*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $32768, %eax # imm = 0x8000
877*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ecx
878*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
879*9880d681SAndroid Build Coastguard Worker;
880*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_GET_FLUSH_ZERO_MODE:
881*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
882*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
883*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
884*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
885*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $32768, %eax # imm = 0x8000
886*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
887*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
888*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
889*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
890*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1, align 4
891*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, 32768
892*9880d681SAndroid Build Coastguard Worker  ret i32 %4
893*9880d681SAndroid Build Coastguard Worker}
894*9880d681SAndroid Build Coastguard Worker
895*9880d681SAndroid Build Coastguard Workerdefine i32 @test_MM_GET_ROUNDING_MODE() nounwind {
896*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_GET_ROUNDING_MODE:
897*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
898*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
899*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %eax
900*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%eax)
901*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %eax
902*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $24576, %eax # imm = 0x6000
903*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ecx
904*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
905*9880d681SAndroid Build Coastguard Worker;
906*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_GET_ROUNDING_MODE:
907*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
908*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
909*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
910*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
911*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $24576, %eax # imm = 0x6000
912*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
913*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
914*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
915*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
916*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1, align 4
917*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, 24576
918*9880d681SAndroid Build Coastguard Worker  ret i32 %4
919*9880d681SAndroid Build Coastguard Worker}
920*9880d681SAndroid Build Coastguard Worker
921*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_getcsr() nounwind {
922*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_getcsr:
923*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
924*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
925*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %eax
926*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%eax)
927*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %eax
928*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ecx
929*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
930*9880d681SAndroid Build Coastguard Worker;
931*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_getcsr:
932*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
933*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
934*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
935*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
936*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
937*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
938*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
939*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
940*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1, align 4
941*9880d681SAndroid Build Coastguard Worker  ret i32 %3
942*9880d681SAndroid Build Coastguard Worker}
943*9880d681SAndroid Build Coastguard Worker
944*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_load_ps(float* %a0) nounwind {
945*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_load_ps:
946*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
947*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
948*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%eax), %xmm0
949*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
950*9880d681SAndroid Build Coastguard Worker;
951*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_load_ps:
952*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
953*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rdi), %xmm0
954*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
955*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
956*9880d681SAndroid Build Coastguard Worker  %res = load <4 x float>, <4 x float>* %arg0, align 16
957*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
958*9880d681SAndroid Build Coastguard Worker}
959*9880d681SAndroid Build Coastguard Worker
960*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_load_ps1(float* %a0) nounwind {
961*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_load_ps1:
962*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
963*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
964*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
965*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
966*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
967*9880d681SAndroid Build Coastguard Worker;
968*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_load_ps1:
969*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
970*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
971*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
972*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
973*9880d681SAndroid Build Coastguard Worker  %ld = load float, float* %a0, align 4
974*9880d681SAndroid Build Coastguard Worker  %res0 = insertelement <4 x float> undef, float %ld, i32 0
975*9880d681SAndroid Build Coastguard Worker  %res1 = insertelement <4 x float> %res0, float %ld, i32 1
976*9880d681SAndroid Build Coastguard Worker  %res2 = insertelement <4 x float> %res1, float %ld, i32 2
977*9880d681SAndroid Build Coastguard Worker  %res3 = insertelement <4 x float> %res2, float %ld, i32 3
978*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
979*9880d681SAndroid Build Coastguard Worker}
980*9880d681SAndroid Build Coastguard Worker
981*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_load_ss(float* %a0) nounwind {
982*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_load_ss:
983*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
984*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
985*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
986*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
987*9880d681SAndroid Build Coastguard Worker;
988*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_load_ss:
989*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
990*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
991*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
992*9880d681SAndroid Build Coastguard Worker  %ld = load float, float* %a0, align 1
993*9880d681SAndroid Build Coastguard Worker  %res0 = insertelement <4 x float> undef, float %ld, i32 0
994*9880d681SAndroid Build Coastguard Worker  %res1 = insertelement <4 x float> %res0, float 0.0, i32 1
995*9880d681SAndroid Build Coastguard Worker  %res2 = insertelement <4 x float> %res1, float 0.0, i32 2
996*9880d681SAndroid Build Coastguard Worker  %res3 = insertelement <4 x float> %res2, float 0.0, i32 3
997*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
998*9880d681SAndroid Build Coastguard Worker}
999*9880d681SAndroid Build Coastguard Worker
1000*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_load1_ps(float* %a0) nounwind {
1001*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_load1_ps:
1002*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1003*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1004*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1005*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1006*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1007*9880d681SAndroid Build Coastguard Worker;
1008*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_load1_ps:
1009*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1010*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1011*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1012*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1013*9880d681SAndroid Build Coastguard Worker  %ld = load float, float* %a0, align 4
1014*9880d681SAndroid Build Coastguard Worker  %res0 = insertelement <4 x float> undef, float %ld, i32 0
1015*9880d681SAndroid Build Coastguard Worker  %res1 = insertelement <4 x float> %res0, float %ld, i32 1
1016*9880d681SAndroid Build Coastguard Worker  %res2 = insertelement <4 x float> %res1, float %ld, i32 2
1017*9880d681SAndroid Build Coastguard Worker  %res3 = insertelement <4 x float> %res2, float %ld, i32 3
1018*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
1019*9880d681SAndroid Build Coastguard Worker}
1020*9880d681SAndroid Build Coastguard Worker
1021*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_loadh_pi(<4 x float> %a0, x86_mmx* %a1) {
1022*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_loadh_pi:
1023*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1024*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1025*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1026*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1027*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1028*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1029*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1030*9880d681SAndroid Build Coastguard Worker;
1031*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_loadh_pi:
1032*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1033*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq (%rdi), %rax
1034*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
1035*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rax
1036*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
1037*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1038*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1039*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1040*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorps %xmm2, %xmm2
1041*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
1042*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1043*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1044*9880d681SAndroid Build Coastguard Worker  %ptr = bitcast x86_mmx* %a1 to <2 x float>*
1045*9880d681SAndroid Build Coastguard Worker  %ld  = load <2 x float>, <2 x float>* %ptr
1046*9880d681SAndroid Build Coastguard Worker  %ext = shufflevector <2 x float> %ld, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
1047*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %ext, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1048*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1049*9880d681SAndroid Build Coastguard Worker}
1050*9880d681SAndroid Build Coastguard Worker
1051*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_loadl_pi(<4 x float> %a0, x86_mmx* %a1) {
1052*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_loadl_pi:
1053*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1054*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1055*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1056*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1057*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1058*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,3]
1059*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, %xmm0
1060*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1061*9880d681SAndroid Build Coastguard Worker;
1062*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_loadl_pi:
1063*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1064*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq (%rdi), %rax
1065*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
1066*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rax
1067*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %eax, -{{[0-9]+}}(%rsp)
1068*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1069*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1070*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1071*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorps %xmm2, %xmm2
1072*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
1073*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm0[2,3]
1074*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, %xmm0
1075*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1076*9880d681SAndroid Build Coastguard Worker  %ptr = bitcast x86_mmx* %a1 to <2 x float>*
1077*9880d681SAndroid Build Coastguard Worker  %ld  = load <2 x float>, <2 x float>* %ptr
1078*9880d681SAndroid Build Coastguard Worker  %ext = shufflevector <2 x float> %ld, <2 x float> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
1079*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %ext, <4 x i32> <i32 4, i32 5, i32 2, i32 3>
1080*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1081*9880d681SAndroid Build Coastguard Worker}
1082*9880d681SAndroid Build Coastguard Worker
1083*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_loadr_ps(float* %a0) nounwind {
1084*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_loadr_ps:
1085*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1086*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1087*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%eax), %xmm0
1088*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
1089*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1090*9880d681SAndroid Build Coastguard Worker;
1091*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_loadr_ps:
1092*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1093*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rdi), %xmm0
1094*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
1095*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1096*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1097*9880d681SAndroid Build Coastguard Worker  %ld = load <4 x float>, <4 x float>* %arg0, align 16
1098*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %ld, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1099*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1100*9880d681SAndroid Build Coastguard Worker}
1101*9880d681SAndroid Build Coastguard Worker
1102*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_loadu_ps(float* %a0) nounwind {
1103*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_loadu_ps:
1104*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1105*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1106*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movups (%eax), %xmm0
1107*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1108*9880d681SAndroid Build Coastguard Worker;
1109*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_loadu_ps:
1110*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1111*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movups (%rdi), %xmm0
1112*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1113*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1114*9880d681SAndroid Build Coastguard Worker  %res = load <4 x float>, <4 x float>* %arg0, align 1
1115*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1116*9880d681SAndroid Build Coastguard Worker}
1117*9880d681SAndroid Build Coastguard Worker
1118*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_max_ps(<4 x float> %a0, <4 x float> %a1) {
1119*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_max_ps:
1120*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1121*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    maxps %xmm1, %xmm0
1122*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1123*9880d681SAndroid Build Coastguard Worker;
1124*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_max_ps:
1125*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1126*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    maxps %xmm1, %xmm0
1127*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1128*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.max.ps(<4 x float> %a0, <4 x float> %a1)
1129*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1130*9880d681SAndroid Build Coastguard Worker}
1131*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.max.ps(<4 x float>, <4 x float>) nounwind readnone
1132*9880d681SAndroid Build Coastguard Worker
1133*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_max_ss(<4 x float> %a0, <4 x float> %a1) {
1134*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_max_ss:
1135*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1136*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    maxss %xmm1, %xmm0
1137*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1138*9880d681SAndroid Build Coastguard Worker;
1139*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_max_ss:
1140*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1141*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    maxss %xmm1, %xmm0
1142*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1143*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.max.ss(<4 x float> %a0, <4 x float> %a1)
1144*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1145*9880d681SAndroid Build Coastguard Worker}
1146*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.max.ss(<4 x float>, <4 x float>) nounwind readnone
1147*9880d681SAndroid Build Coastguard Worker
1148*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_min_ps(<4 x float> %a0, <4 x float> %a1) {
1149*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_min_ps:
1150*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1151*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    minps %xmm1, %xmm0
1152*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1153*9880d681SAndroid Build Coastguard Worker;
1154*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_min_ps:
1155*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1156*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    minps %xmm1, %xmm0
1157*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1158*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.min.ps(<4 x float> %a0, <4 x float> %a1)
1159*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1160*9880d681SAndroid Build Coastguard Worker}
1161*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.min.ps(<4 x float>, <4 x float>) nounwind readnone
1162*9880d681SAndroid Build Coastguard Worker
1163*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_min_ss(<4 x float> %a0, <4 x float> %a1) {
1164*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_min_ss:
1165*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1166*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    minss %xmm1, %xmm0
1167*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1168*9880d681SAndroid Build Coastguard Worker;
1169*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_min_ss:
1170*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1171*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    minss %xmm1, %xmm0
1172*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1173*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.min.ss(<4 x float> %a0, <4 x float> %a1)
1174*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1175*9880d681SAndroid Build Coastguard Worker}
1176*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.min.ss(<4 x float>, <4 x float>) nounwind readnone
1177*9880d681SAndroid Build Coastguard Worker
1178*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_move_ss(<4 x float> %a0, <4 x float> %a1) {
1179*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_move_ss:
1180*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1181*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
1182*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1183*9880d681SAndroid Build Coastguard Worker;
1184*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_move_ss:
1185*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1186*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
1187*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1188*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 4, i32 1, i32 2, i32 3>
1189*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1190*9880d681SAndroid Build Coastguard Worker}
1191*9880d681SAndroid Build Coastguard Worker
1192*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_movehl_ps(<4 x float> %a0, <4 x float> %a1) {
1193*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_movehl_ps:
1194*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1195*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1]
1196*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1197*9880d681SAndroid Build Coastguard Worker;
1198*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_movehl_ps:
1199*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1200*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movhlps {{.*#+}} xmm0 = xmm1[1],xmm0[1]
1201*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1202*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
1203*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1204*9880d681SAndroid Build Coastguard Worker}
1205*9880d681SAndroid Build Coastguard Worker
1206*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_movelh_ps(<4 x float> %a0, <4 x float> %a1) {
1207*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_movelh_ps:
1208*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1209*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1210*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1211*9880d681SAndroid Build Coastguard Worker;
1212*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_movelh_ps:
1213*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1214*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1215*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1216*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
1217*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1218*9880d681SAndroid Build Coastguard Worker}
1219*9880d681SAndroid Build Coastguard Worker
1220*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_movemask_ps(<4 x float> %a0) nounwind {
1221*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_movemask_ps:
1222*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1223*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movmskps %xmm0, %eax
1224*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1225*9880d681SAndroid Build Coastguard Worker;
1226*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_movemask_ps:
1227*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1228*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movmskps %xmm0, %eax
1229*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1230*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.movmsk.ps(<4 x float> %a0)
1231*9880d681SAndroid Build Coastguard Worker  ret i32 %res
1232*9880d681SAndroid Build Coastguard Worker}
1233*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.movmsk.ps(<4 x float>) nounwind readnone
1234*9880d681SAndroid Build Coastguard Worker
1235*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_mul_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
1236*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mul_ps:
1237*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1238*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    mulps %xmm1, %xmm0
1239*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1240*9880d681SAndroid Build Coastguard Worker;
1241*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mul_ps:
1242*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1243*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    mulps %xmm1, %xmm0
1244*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1245*9880d681SAndroid Build Coastguard Worker  %res = fmul <4 x float> %a0, %a1
1246*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1247*9880d681SAndroid Build Coastguard Worker}
1248*9880d681SAndroid Build Coastguard Worker
1249*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_mul_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
1250*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_mul_ss:
1251*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1252*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    mulss %xmm1, %xmm0
1253*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1254*9880d681SAndroid Build Coastguard Worker;
1255*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_mul_ss:
1256*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1257*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    mulss %xmm1, %xmm0
1258*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1259*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %a0, i32 0
1260*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a1, i32 0
1261*9880d681SAndroid Build Coastguard Worker  %fmul = fmul float %ext0, %ext1
1262*9880d681SAndroid Build Coastguard Worker  %res = insertelement <4 x float> %a0, float %fmul, i32 0
1263*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1264*9880d681SAndroid Build Coastguard Worker}
1265*9880d681SAndroid Build Coastguard Worker
1266*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_or_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
1267*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_or_ps:
1268*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1269*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebp
1270*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esp, %ebp
1271*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %esi
1272*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-16, %esp
1273*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subl $64, %esp
1274*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)
1275*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1276*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1277*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
1278*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
1279*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)
1280*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl {{[0-9]+}}(%esp), %esi
1281*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esi, (%esp)
1282*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl {{[0-9]+}}(%esp), %edx
1283*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, {{[0-9]+}}(%esp)
1284*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl {{[0-9]+}}(%esp), %eax
1285*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1286*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl {{[0-9]+}}(%esp), %ecx
1287*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1288*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1289*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1290*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
1291*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1292*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1293*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1294*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1295*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal -4(%ebp), %esp
1296*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %esi
1297*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebp
1298*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1299*9880d681SAndroid Build Coastguard Worker;
1300*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_or_ps:
1301*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1302*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1303*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
1304*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %r8
1305*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
1306*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rdx
1307*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rdx, %rsi
1308*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %eax, %edx
1309*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rax
1310*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx
1311*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rcx, %rdi
1312*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %r8d, %ecx
1313*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %r8
1314*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rsi
1315*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rdi
1316*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
1317*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
1318*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %r8d, %edi
1319*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
1320*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %eax, %esi
1321*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, -{{[0-9]+}}(%rsp)
1322*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1323*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1324*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1325*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1326*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1327*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1328*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1329*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1330*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <4 x float> %a0 to <4 x i32>
1331*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <4 x float> %a1 to <4 x i32>
1332*9880d681SAndroid Build Coastguard Worker  %res = or <4 x i32> %arg0, %arg1
1333*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <4 x float>
1334*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %bc
1335*9880d681SAndroid Build Coastguard Worker}
1336*9880d681SAndroid Build Coastguard Worker
1337*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_prefetch(i8* %a0) {
1338*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_prefetch:
1339*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1340*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1341*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    prefetchnta (%eax)
1342*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1343*9880d681SAndroid Build Coastguard Worker;
1344*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_prefetch:
1345*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1346*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    prefetchnta (%rdi)
1347*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1348*9880d681SAndroid Build Coastguard Worker  call void @llvm.prefetch(i8* %a0, i32 0, i32 0, i32 1)
1349*9880d681SAndroid Build Coastguard Worker  ret void
1350*9880d681SAndroid Build Coastguard Worker}
1351*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.prefetch(i8* nocapture, i32, i32, i32) nounwind readnone
1352*9880d681SAndroid Build Coastguard Worker
1353*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_rcp_ps(<4 x float> %a0) {
1354*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rcp_ps:
1355*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1356*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    rcpps %xmm0, %xmm0
1357*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1358*9880d681SAndroid Build Coastguard Worker;
1359*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rcp_ps:
1360*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1361*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    rcpps %xmm0, %xmm0
1362*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1363*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.rcp.ps(<4 x float> %a0)
1364*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1365*9880d681SAndroid Build Coastguard Worker}
1366*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.rcp.ps(<4 x float>) nounwind readnone
1367*9880d681SAndroid Build Coastguard Worker
1368*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_rcp_ss(<4 x float> %a0) {
1369*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rcp_ss:
1370*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1371*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    rcpss %xmm0, %xmm0
1372*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1373*9880d681SAndroid Build Coastguard Worker;
1374*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rcp_ss:
1375*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1376*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    rcpss %xmm0, %xmm0
1377*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1378*9880d681SAndroid Build Coastguard Worker  %rcp = call <4 x float> @llvm.x86.sse.rcp.ss(<4 x float> %a0)
1379*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %rcp, i32 0
1380*9880d681SAndroid Build Coastguard Worker  %ins0 = insertelement <4 x float> undef, float %ext0, i32 0
1381*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a0, i32 1
1382*9880d681SAndroid Build Coastguard Worker  %ins1 = insertelement <4 x float> %ins0, float %ext1, i32 1
1383*9880d681SAndroid Build Coastguard Worker  %ext2 = extractelement <4 x float> %a0, i32 2
1384*9880d681SAndroid Build Coastguard Worker  %ins2 = insertelement <4 x float> %ins1, float %ext2, i32 2
1385*9880d681SAndroid Build Coastguard Worker  %ext3 = extractelement <4 x float> %a0, i32 3
1386*9880d681SAndroid Build Coastguard Worker  %ins3 = insertelement <4 x float> %ins2, float %ext3, i32 3
1387*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %ins3
1388*9880d681SAndroid Build Coastguard Worker}
1389*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.rcp.ss(<4 x float>) nounwind readnone
1390*9880d681SAndroid Build Coastguard Worker
1391*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_rsqrt_ps(<4 x float> %a0) {
1392*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rsqrt_ps:
1393*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1394*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    rsqrtps %xmm0, %xmm0
1395*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1396*9880d681SAndroid Build Coastguard Worker;
1397*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rsqrt_ps:
1398*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1399*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    rsqrtps %xmm0, %xmm0
1400*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1401*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float> %a0)
1402*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1403*9880d681SAndroid Build Coastguard Worker}
1404*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.rsqrt.ps(<4 x float>) nounwind readnone
1405*9880d681SAndroid Build Coastguard Worker
1406*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_rsqrt_ss(<4 x float> %a0) {
1407*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_rsqrt_ss:
1408*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1409*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    rsqrtss %xmm0, %xmm0
1410*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1411*9880d681SAndroid Build Coastguard Worker;
1412*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_rsqrt_ss:
1413*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1414*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    rsqrtss %xmm0, %xmm0
1415*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1416*9880d681SAndroid Build Coastguard Worker  %rsqrt = call <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float> %a0)
1417*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %rsqrt, i32 0
1418*9880d681SAndroid Build Coastguard Worker  %ins0 = insertelement <4 x float> undef, float %ext0, i32 0
1419*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a0, i32 1
1420*9880d681SAndroid Build Coastguard Worker  %ins1 = insertelement <4 x float> %ins0, float %ext1, i32 1
1421*9880d681SAndroid Build Coastguard Worker  %ext2 = extractelement <4 x float> %a0, i32 2
1422*9880d681SAndroid Build Coastguard Worker  %ins2 = insertelement <4 x float> %ins1, float %ext2, i32 2
1423*9880d681SAndroid Build Coastguard Worker  %ext3 = extractelement <4 x float> %a0, i32 3
1424*9880d681SAndroid Build Coastguard Worker  %ins3 = insertelement <4 x float> %ins2, float %ext3, i32 3
1425*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %ins3
1426*9880d681SAndroid Build Coastguard Worker}
1427*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.rsqrt.ss(<4 x float>) nounwind readnone
1428*9880d681SAndroid Build Coastguard Worker
1429*9880d681SAndroid Build Coastguard Workerdefine void @test_MM_SET_EXCEPTION_MASK(i32 %a0) nounwind {
1430*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_SET_EXCEPTION_MASK:
1431*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1432*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
1433*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1434*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %ecx
1435*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%ecx)
1436*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %edx
1437*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-8065, %edx # imm = 0xE07F
1438*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl %eax, %edx
1439*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, (%esp)
1440*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ldmxcsr (%ecx)
1441*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %eax
1442*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1443*9880d681SAndroid Build Coastguard Worker;
1444*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_SET_EXCEPTION_MASK:
1445*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1446*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
1447*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
1448*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
1449*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $-8065, %ecx # imm = 0xE07F
1450*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %edi, %ecx
1451*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
1452*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ldmxcsr (%rax)
1453*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1454*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
1455*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
1456*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
1457*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1
1458*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, -8065
1459*9880d681SAndroid Build Coastguard Worker  %5 = or i32 %4, %a0
1460*9880d681SAndroid Build Coastguard Worker  store i32 %5, i32* %1
1461*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.ldmxcsr(i8* %2)
1462*9880d681SAndroid Build Coastguard Worker  ret void
1463*9880d681SAndroid Build Coastguard Worker}
1464*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.sse.ldmxcsr(i8*) nounwind readnone
1465*9880d681SAndroid Build Coastguard Worker
1466*9880d681SAndroid Build Coastguard Workerdefine void @test_MM_SET_EXCEPTION_STATE(i32 %a0) nounwind {
1467*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_SET_EXCEPTION_STATE:
1468*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1469*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
1470*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1471*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %ecx
1472*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%ecx)
1473*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %edx
1474*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-64, %edx
1475*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl %eax, %edx
1476*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, (%esp)
1477*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ldmxcsr (%ecx)
1478*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %eax
1479*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1480*9880d681SAndroid Build Coastguard Worker;
1481*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_SET_EXCEPTION_STATE:
1482*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1483*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
1484*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
1485*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
1486*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $-64, %ecx
1487*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %edi, %ecx
1488*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
1489*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ldmxcsr (%rax)
1490*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1491*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
1492*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
1493*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
1494*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1
1495*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, -64
1496*9880d681SAndroid Build Coastguard Worker  %5 = or i32 %4, %a0
1497*9880d681SAndroid Build Coastguard Worker  store i32 %5, i32* %1
1498*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.ldmxcsr(i8* %2)
1499*9880d681SAndroid Build Coastguard Worker  ret void
1500*9880d681SAndroid Build Coastguard Worker}
1501*9880d681SAndroid Build Coastguard Worker
1502*9880d681SAndroid Build Coastguard Workerdefine void @test_MM_SET_FLUSH_ZERO_MODE(i32 %a0) nounwind {
1503*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_SET_FLUSH_ZERO_MODE:
1504*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1505*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
1506*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1507*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %ecx
1508*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%ecx)
1509*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %edx
1510*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-32769, %edx # imm = 0xFFFF7FFF
1511*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl %eax, %edx
1512*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, (%esp)
1513*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ldmxcsr (%ecx)
1514*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %eax
1515*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1516*9880d681SAndroid Build Coastguard Worker;
1517*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_SET_FLUSH_ZERO_MODE:
1518*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1519*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
1520*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
1521*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
1522*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $-32769, %ecx # imm = 0xFFFF7FFF
1523*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %edi, %ecx
1524*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
1525*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ldmxcsr (%rax)
1526*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1527*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
1528*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
1529*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
1530*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1
1531*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, -32769
1532*9880d681SAndroid Build Coastguard Worker  %5 = or i32 %4, %a0
1533*9880d681SAndroid Build Coastguard Worker  store i32 %5, i32* %1
1534*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.ldmxcsr(i8* %2)
1535*9880d681SAndroid Build Coastguard Worker  ret void
1536*9880d681SAndroid Build Coastguard Worker}
1537*9880d681SAndroid Build Coastguard Worker
1538*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_set_ps(float %a0, float %a1, float %a2, float %a3) nounwind {
1539*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_set_ps:
1540*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1541*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1542*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1543*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1544*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1545*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
1546*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1547*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1548*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1549*9880d681SAndroid Build Coastguard Worker;
1550*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_set_ps:
1551*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1552*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
1553*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
1554*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
1555*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm3, %xmm0
1556*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1557*9880d681SAndroid Build Coastguard Worker  %res0  = insertelement <4 x float> undef, float %a3, i32 0
1558*9880d681SAndroid Build Coastguard Worker  %res1  = insertelement <4 x float> %res0, float %a2, i32 1
1559*9880d681SAndroid Build Coastguard Worker  %res2  = insertelement <4 x float> %res1, float %a1, i32 2
1560*9880d681SAndroid Build Coastguard Worker  %res3  = insertelement <4 x float> %res2, float %a0, i32 3
1561*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
1562*9880d681SAndroid Build Coastguard Worker}
1563*9880d681SAndroid Build Coastguard Worker
1564*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_set_ps1(float %a0) nounwind {
1565*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_set_ps1:
1566*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1567*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1568*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1569*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1570*9880d681SAndroid Build Coastguard Worker;
1571*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_set_ps1:
1572*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1573*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1574*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1575*9880d681SAndroid Build Coastguard Worker  %res0  = insertelement <4 x float> undef, float %a0, i32 0
1576*9880d681SAndroid Build Coastguard Worker  %res1  = insertelement <4 x float> %res0, float %a0, i32 1
1577*9880d681SAndroid Build Coastguard Worker  %res2  = insertelement <4 x float> %res1, float %a0, i32 2
1578*9880d681SAndroid Build Coastguard Worker  %res3  = insertelement <4 x float> %res2, float %a0, i32 3
1579*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
1580*9880d681SAndroid Build Coastguard Worker}
1581*9880d681SAndroid Build Coastguard Worker
1582*9880d681SAndroid Build Coastguard Workerdefine void @test_MM_SET_ROUNDING_MODE(i32 %a0) nounwind {
1583*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_SET_ROUNDING_MODE:
1584*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1585*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
1586*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1587*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %ecx
1588*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    stmxcsr (%ecx)
1589*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %edx
1590*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-24577, %edx # imm = 0x9FFF
1591*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orl %eax, %edx
1592*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, (%esp)
1593*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ldmxcsr (%ecx)
1594*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %eax
1595*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1596*9880d681SAndroid Build Coastguard Worker;
1597*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_SET_ROUNDING_MODE:
1598*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1599*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
1600*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    stmxcsr (%rax)
1601*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %ecx
1602*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andl $-24577, %ecx # imm = 0x9FFF
1603*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orl %edi, %ecx
1604*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
1605*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ldmxcsr (%rax)
1606*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1607*9880d681SAndroid Build Coastguard Worker  %1 = alloca i32, align 4
1608*9880d681SAndroid Build Coastguard Worker  %2 = bitcast i32* %1 to i8*
1609*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.stmxcsr(i8* %2)
1610*9880d681SAndroid Build Coastguard Worker  %3 = load i32, i32* %1
1611*9880d681SAndroid Build Coastguard Worker  %4 = and i32 %3, -24577
1612*9880d681SAndroid Build Coastguard Worker  %5 = or i32 %4, %a0
1613*9880d681SAndroid Build Coastguard Worker  store i32 %5, i32* %1
1614*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.ldmxcsr(i8* %2)
1615*9880d681SAndroid Build Coastguard Worker  ret void
1616*9880d681SAndroid Build Coastguard Worker}
1617*9880d681SAndroid Build Coastguard Worker
1618*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_set_ss(float %a0) nounwind {
1619*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_set_ss:
1620*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1621*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1622*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorps %xmm0, %xmm0
1623*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
1624*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1625*9880d681SAndroid Build Coastguard Worker;
1626*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_set_ss:
1627*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1628*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorps %xmm1, %xmm1
1629*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = xmm0[0],xmm1[1,2,3]
1630*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, %xmm0
1631*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1632*9880d681SAndroid Build Coastguard Worker  %res0  = insertelement <4 x float> undef, float %a0, i32 0
1633*9880d681SAndroid Build Coastguard Worker  %res1  = insertelement <4 x float> %res0, float 0.0, i32 1
1634*9880d681SAndroid Build Coastguard Worker  %res2  = insertelement <4 x float> %res1, float 0.0, i32 2
1635*9880d681SAndroid Build Coastguard Worker  %res3  = insertelement <4 x float> %res2, float 0.0, i32 3
1636*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
1637*9880d681SAndroid Build Coastguard Worker}
1638*9880d681SAndroid Build Coastguard Worker
1639*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_set1_ps(float %a0) nounwind {
1640*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_set1_ps:
1641*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1642*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1643*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1644*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1645*9880d681SAndroid Build Coastguard Worker;
1646*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_set1_ps:
1647*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1648*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1649*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1650*9880d681SAndroid Build Coastguard Worker  %res0  = insertelement <4 x float> undef, float %a0, i32 0
1651*9880d681SAndroid Build Coastguard Worker  %res1  = insertelement <4 x float> %res0, float %a0, i32 1
1652*9880d681SAndroid Build Coastguard Worker  %res2  = insertelement <4 x float> %res1, float %a0, i32 2
1653*9880d681SAndroid Build Coastguard Worker  %res3  = insertelement <4 x float> %res2, float %a0, i32 3
1654*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
1655*9880d681SAndroid Build Coastguard Worker}
1656*9880d681SAndroid Build Coastguard Worker
1657*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_setcsr(i32 %a0) nounwind {
1658*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_setcsr:
1659*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1660*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %eax
1661*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1662*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal (%esp), %ecx
1663*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %eax, (%esp)
1664*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ldmxcsr (%ecx)
1665*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %eax
1666*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1667*9880d681SAndroid Build Coastguard Worker;
1668*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_setcsr:
1669*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1670*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    leaq -{{[0-9]+}}(%rsp), %rax
1671*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
1672*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ldmxcsr (%rax)
1673*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1674*9880d681SAndroid Build Coastguard Worker  %st = alloca i32, align 4
1675*9880d681SAndroid Build Coastguard Worker  store i32 %a0, i32* %st, align 4
1676*9880d681SAndroid Build Coastguard Worker  %bc = bitcast i32* %st to i8*
1677*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.ldmxcsr(i8* %bc)
1678*9880d681SAndroid Build Coastguard Worker  ret void
1679*9880d681SAndroid Build Coastguard Worker}
1680*9880d681SAndroid Build Coastguard Worker
1681*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_setr_ps(float %a0, float %a1, float %a2, float %a3) nounwind {
1682*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_setr_ps:
1683*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1684*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
1685*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
1686*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm3 = mem[0],zero,zero,zero
1687*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
1688*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
1689*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1690*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
1691*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1692*9880d681SAndroid Build Coastguard Worker;
1693*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_setr_ps:
1694*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1695*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
1696*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1697*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1698*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1699*9880d681SAndroid Build Coastguard Worker  %res0  = insertelement <4 x float> undef, float %a0, i32 0
1700*9880d681SAndroid Build Coastguard Worker  %res1  = insertelement <4 x float> %res0, float %a1, i32 1
1701*9880d681SAndroid Build Coastguard Worker  %res2  = insertelement <4 x float> %res1, float %a2, i32 2
1702*9880d681SAndroid Build Coastguard Worker  %res3  = insertelement <4 x float> %res2, float %a3, i32 3
1703*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res3
1704*9880d681SAndroid Build Coastguard Worker}
1705*9880d681SAndroid Build Coastguard Worker
1706*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_setzero_ps() {
1707*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_setzero_ps:
1708*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1709*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorps %xmm0, %xmm0
1710*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1711*9880d681SAndroid Build Coastguard Worker;
1712*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_setzero_ps:
1713*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1714*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorps %xmm0, %xmm0
1715*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1716*9880d681SAndroid Build Coastguard Worker  ret <4 x float> zeroinitializer
1717*9880d681SAndroid Build Coastguard Worker}
1718*9880d681SAndroid Build Coastguard Worker
1719*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_sfence() nounwind {
1720*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sfence:
1721*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1722*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sfence
1723*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1724*9880d681SAndroid Build Coastguard Worker;
1725*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sfence:
1726*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1727*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sfence
1728*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1729*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.sse.sfence()
1730*9880d681SAndroid Build Coastguard Worker  ret void
1731*9880d681SAndroid Build Coastguard Worker}
1732*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.sse.sfence() nounwind readnone
1733*9880d681SAndroid Build Coastguard Worker
1734*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_shuffle_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
1735*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_shuffle_ps:
1736*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1737*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]
1738*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1739*9880d681SAndroid Build Coastguard Worker;
1740*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_shuffle_ps:
1741*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1742*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0],xmm1[0,0]
1743*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1744*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 0, i32 4, i32 4>
1745*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1746*9880d681SAndroid Build Coastguard Worker}
1747*9880d681SAndroid Build Coastguard Worker
1748*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_sqrt_ps(<4 x float> %a0) {
1749*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sqrt_ps:
1750*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1751*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sqrtps %xmm0, %xmm0
1752*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1753*9880d681SAndroid Build Coastguard Worker;
1754*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sqrt_ps:
1755*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1756*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sqrtps %xmm0, %xmm0
1757*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1758*9880d681SAndroid Build Coastguard Worker  %res = call <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float> %a0)
1759*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1760*9880d681SAndroid Build Coastguard Worker}
1761*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.sqrt.ps(<4 x float>) nounwind readnone
1762*9880d681SAndroid Build Coastguard Worker
1763*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_sqrt_ss(<4 x float> %a0) {
1764*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sqrt_ss:
1765*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1766*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sqrtss %xmm0, %xmm0
1767*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1768*9880d681SAndroid Build Coastguard Worker;
1769*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sqrt_ss:
1770*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1771*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sqrtss %xmm0, %xmm0
1772*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1773*9880d681SAndroid Build Coastguard Worker  %sqrt = call <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float> %a0)
1774*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %sqrt, i32 0
1775*9880d681SAndroid Build Coastguard Worker  %ins0 = insertelement <4 x float> undef, float %ext0, i32 0
1776*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a0, i32 1
1777*9880d681SAndroid Build Coastguard Worker  %ins1 = insertelement <4 x float> %ins0, float %ext1, i32 1
1778*9880d681SAndroid Build Coastguard Worker  %ext2 = extractelement <4 x float> %a0, i32 2
1779*9880d681SAndroid Build Coastguard Worker  %ins2 = insertelement <4 x float> %ins1, float %ext2, i32 2
1780*9880d681SAndroid Build Coastguard Worker  %ext3 = extractelement <4 x float> %a0, i32 3
1781*9880d681SAndroid Build Coastguard Worker  %ins3 = insertelement <4 x float> %ins2, float %ext3, i32 3
1782*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %ins3
1783*9880d681SAndroid Build Coastguard Worker}
1784*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.x86.sse.sqrt.ss(<4 x float>) nounwind readnone
1785*9880d681SAndroid Build Coastguard Worker
1786*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_store_ps(float *%a0, <4 x float> %a1) {
1787*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_store_ps:
1788*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1789*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1790*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, (%eax)
1791*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1792*9880d681SAndroid Build Coastguard Worker;
1793*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_store_ps:
1794*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1795*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, (%rdi)
1796*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1797*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1798*9880d681SAndroid Build Coastguard Worker  store <4 x float> %a1, <4 x float>* %arg0, align 16
1799*9880d681SAndroid Build Coastguard Worker  ret void
1800*9880d681SAndroid Build Coastguard Worker}
1801*9880d681SAndroid Build Coastguard Worker
1802*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_store_ps1(float *%a0, <4 x float> %a1) {
1803*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_store_ps1:
1804*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1805*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1806*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1807*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, (%eax)
1808*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1809*9880d681SAndroid Build Coastguard Worker;
1810*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_store_ps1:
1811*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1812*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1813*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, (%rdi)
1814*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1815*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1816*9880d681SAndroid Build Coastguard Worker  %shuf = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> zeroinitializer
1817*9880d681SAndroid Build Coastguard Worker  store <4 x float> %shuf, <4 x float>* %arg0, align 16
1818*9880d681SAndroid Build Coastguard Worker  ret void
1819*9880d681SAndroid Build Coastguard Worker}
1820*9880d681SAndroid Build Coastguard Worker
1821*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_store_ss(float *%a0, <4 x float> %a1) {
1822*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_store_ss:
1823*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1824*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1825*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss %xmm0, (%eax)
1826*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1827*9880d681SAndroid Build Coastguard Worker;
1828*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_store_ss:
1829*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1830*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss %xmm0, (%rdi)
1831*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1832*9880d681SAndroid Build Coastguard Worker  %ext = extractelement <4 x float> %a1, i32 0
1833*9880d681SAndroid Build Coastguard Worker  store float %ext, float* %a0, align 1
1834*9880d681SAndroid Build Coastguard Worker  ret void
1835*9880d681SAndroid Build Coastguard Worker}
1836*9880d681SAndroid Build Coastguard Worker
1837*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_store1_ps(float *%a0, <4 x float> %a1) {
1838*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_store1_ps:
1839*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1840*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1841*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1842*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, (%eax)
1843*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1844*9880d681SAndroid Build Coastguard Worker;
1845*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_store1_ps:
1846*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1847*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,0,0,0]
1848*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, (%rdi)
1849*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1850*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1851*9880d681SAndroid Build Coastguard Worker  %shuf = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> zeroinitializer
1852*9880d681SAndroid Build Coastguard Worker  store <4 x float> %shuf, <4 x float>* %arg0, align 16
1853*9880d681SAndroid Build Coastguard Worker  ret void
1854*9880d681SAndroid Build Coastguard Worker}
1855*9880d681SAndroid Build Coastguard Worker
1856*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_storeh_ps(x86_mmx *%a0, <4 x float> %a1) nounwind {
1857*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_storeh_ps:
1858*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1859*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebp
1860*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esp, %ebp
1861*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-16, %esp
1862*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subl $32, %esp
1863*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl 8(%ebp), %eax
1864*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, (%esp)
1865*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1866*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
1867*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, 4(%eax)
1868*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, (%eax)
1869*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ebp, %esp
1870*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebp
1871*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1872*9880d681SAndroid Build Coastguard Worker;
1873*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_storeh_ps:
1874*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1875*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1876*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
1877*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rax, (%rdi)
1878*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1879*9880d681SAndroid Build Coastguard Worker  %ptr = bitcast x86_mmx* %a0 to i64*
1880*9880d681SAndroid Build Coastguard Worker  %bc  = bitcast <4 x float> %a1 to <2 x i64>
1881*9880d681SAndroid Build Coastguard Worker  %ext = extractelement <2 x i64> %bc, i32 1
1882*9880d681SAndroid Build Coastguard Worker  store i64 %ext, i64* %ptr
1883*9880d681SAndroid Build Coastguard Worker  ret void
1884*9880d681SAndroid Build Coastguard Worker}
1885*9880d681SAndroid Build Coastguard Worker
1886*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_storel_ps(x86_mmx *%a0, <4 x float> %a1) nounwind {
1887*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_storel_ps:
1888*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1889*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebp
1890*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esp, %ebp
1891*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-16, %esp
1892*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subl $32, %esp
1893*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl 8(%ebp), %eax
1894*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, (%esp)
1895*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl (%esp), %ecx
1896*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
1897*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, 4(%eax)
1898*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, (%eax)
1899*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ebp, %esp
1900*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebp
1901*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1902*9880d681SAndroid Build Coastguard Worker;
1903*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_storel_ps:
1904*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1905*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
1906*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
1907*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rax, (%rdi)
1908*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1909*9880d681SAndroid Build Coastguard Worker  %ptr = bitcast x86_mmx* %a0 to i64*
1910*9880d681SAndroid Build Coastguard Worker  %bc  = bitcast <4 x float> %a1 to <2 x i64>
1911*9880d681SAndroid Build Coastguard Worker  %ext = extractelement <2 x i64> %bc, i32 0
1912*9880d681SAndroid Build Coastguard Worker  store i64 %ext, i64* %ptr
1913*9880d681SAndroid Build Coastguard Worker  ret void
1914*9880d681SAndroid Build Coastguard Worker}
1915*9880d681SAndroid Build Coastguard Worker
1916*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_storer_ps(float *%a0, <4 x float> %a1) {
1917*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_storer_ps:
1918*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1919*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1920*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
1921*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, (%eax)
1922*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1923*9880d681SAndroid Build Coastguard Worker;
1924*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_storer_ps:
1925*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1926*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,2,1,0]
1927*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, (%rdi)
1928*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1929*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1930*9880d681SAndroid Build Coastguard Worker  %shuf = shufflevector <4 x float> %a1, <4 x float> undef, <4 x i32> <i32 3, i32 2, i32 1, i32 0>
1931*9880d681SAndroid Build Coastguard Worker  store <4 x float> %shuf, <4 x float>* %arg0, align 16
1932*9880d681SAndroid Build Coastguard Worker  ret void
1933*9880d681SAndroid Build Coastguard Worker}
1934*9880d681SAndroid Build Coastguard Worker
1935*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_storeu_ps(float *%a0, <4 x float> %a1) {
1936*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_storeu_ps:
1937*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1938*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1939*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movups %xmm0, (%eax)
1940*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1941*9880d681SAndroid Build Coastguard Worker;
1942*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_storeu_ps:
1943*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1944*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movups %xmm0, (%rdi)
1945*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1946*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1947*9880d681SAndroid Build Coastguard Worker  store <4 x float> %a1, <4 x float>* %arg0, align 1
1948*9880d681SAndroid Build Coastguard Worker  ret void
1949*9880d681SAndroid Build Coastguard Worker}
1950*9880d681SAndroid Build Coastguard Worker
1951*9880d681SAndroid Build Coastguard Workerdefine void @test_mm_stream_ps(float *%a0, <4 x float> %a1) {
1952*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_stream_ps:
1953*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1954*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
1955*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movntps %xmm0, (%eax)
1956*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1957*9880d681SAndroid Build Coastguard Worker;
1958*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_stream_ps:
1959*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1960*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movntps %xmm0, (%rdi)
1961*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1962*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast float* %a0 to <4 x float>*
1963*9880d681SAndroid Build Coastguard Worker  store <4 x float> %a1, <4 x float>* %arg0, align 16, !nontemporal !0
1964*9880d681SAndroid Build Coastguard Worker  ret void
1965*9880d681SAndroid Build Coastguard Worker}
1966*9880d681SAndroid Build Coastguard Worker
1967*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_sub_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
1968*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sub_ps:
1969*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1970*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subps %xmm1, %xmm0
1971*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1972*9880d681SAndroid Build Coastguard Worker;
1973*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sub_ps:
1974*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1975*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    subps %xmm1, %xmm0
1976*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1977*9880d681SAndroid Build Coastguard Worker  %res = fsub <4 x float> %a0, %a1
1978*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1979*9880d681SAndroid Build Coastguard Worker}
1980*9880d681SAndroid Build Coastguard Worker
1981*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_sub_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
1982*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_sub_ss:
1983*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
1984*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subss %xmm1, %xmm0
1985*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
1986*9880d681SAndroid Build Coastguard Worker;
1987*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_sub_ss:
1988*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
1989*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    subss %xmm1, %xmm0
1990*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
1991*9880d681SAndroid Build Coastguard Worker  %ext0 = extractelement <4 x float> %a0, i32 0
1992*9880d681SAndroid Build Coastguard Worker  %ext1 = extractelement <4 x float> %a1, i32 0
1993*9880d681SAndroid Build Coastguard Worker  %fsub = fsub float %ext0, %ext1
1994*9880d681SAndroid Build Coastguard Worker  %res = insertelement <4 x float> %a0, float %fsub, i32 0
1995*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
1996*9880d681SAndroid Build Coastguard Worker}
1997*9880d681SAndroid Build Coastguard Worker
1998*9880d681SAndroid Build Coastguard Workerdefine void @test_MM_TRANSPOSE4_PS(<4 x float>* %a0, <4 x float>* %a1, <4 x float>* %a2, <4 x float>* %a3) nounwind {
1999*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_MM_TRANSPOSE4_PS:
2000*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2001*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %esi
2002*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
2003*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2004*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
2005*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
2006*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%esi), %xmm0
2007*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%edx), %xmm1
2008*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%ecx), %xmm2
2009*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps (%eax), %xmm3
2010*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, %xmm4
2011*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]
2012*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm2, %xmm5
2013*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
2014*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2015*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]
2016*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm4, %xmm1
2017*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm5[0]
2018*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movhlps {{.*#+}} xmm5 = xmm4[1],xmm5[1]
2019*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, %xmm3
2020*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movlhps {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2021*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movhlps {{.*#+}} xmm2 = xmm0[1],xmm2[1]
2022*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, (%esi)
2023*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm5, (%edx)
2024*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm3, (%ecx)
2025*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm2, (%eax)
2026*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %esi
2027*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2028*9880d681SAndroid Build Coastguard Worker;
2029*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_MM_TRANSPOSE4_PS:
2030*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2031*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rdi), %xmm0
2032*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rsi), %xmm1
2033*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rdx), %xmm2
2034*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps (%rcx), %xmm3
2035*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, %xmm4
2036*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]
2037*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm2, %xmm5
2038*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
2039*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2040*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]
2041*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm4, %xmm1
2042*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm5[0]
2043*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movhlps {{.*#+}} xmm5 = xmm4[1],xmm5[1]
2044*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, %xmm3
2045*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movlhps {{.*#+}} xmm3 = xmm3[0],xmm2[0]
2046*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movhlps {{.*#+}} xmm2 = xmm0[1],xmm2[1]
2047*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, (%rdi)
2048*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm5, (%rsi)
2049*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm3, (%rdx)
2050*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm2, (%rcx)
2051*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2052*9880d681SAndroid Build Coastguard Worker  %row0 = load <4 x float>, <4 x float>* %a0, align 16
2053*9880d681SAndroid Build Coastguard Worker  %row1 = load <4 x float>, <4 x float>* %a1, align 16
2054*9880d681SAndroid Build Coastguard Worker  %row2 = load <4 x float>, <4 x float>* %a2, align 16
2055*9880d681SAndroid Build Coastguard Worker  %row3 = load <4 x float>, <4 x float>* %a3, align 16
2056*9880d681SAndroid Build Coastguard Worker  %tmp0 = shufflevector <4 x float> %row0, <4 x float> %row1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2057*9880d681SAndroid Build Coastguard Worker  %tmp2 = shufflevector <4 x float> %row2, <4 x float> %row3, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2058*9880d681SAndroid Build Coastguard Worker  %tmp1 = shufflevector <4 x float> %row0, <4 x float> %row1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2059*9880d681SAndroid Build Coastguard Worker  %tmp3 = shufflevector <4 x float> %row2, <4 x float> %row3, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2060*9880d681SAndroid Build Coastguard Worker  %res0 = shufflevector <4 x float> %tmp0, <4 x float> %tmp2, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
2061*9880d681SAndroid Build Coastguard Worker  %res1 = shufflevector <4 x float> %tmp2, <4 x float> %tmp0, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
2062*9880d681SAndroid Build Coastguard Worker  %res2 = shufflevector <4 x float> %tmp1, <4 x float> %tmp3, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
2063*9880d681SAndroid Build Coastguard Worker  %res3 = shufflevector <4 x float> %tmp3, <4 x float> %tmp1, <4 x i32> <i32 6, i32 7, i32 2, i32 3>
2064*9880d681SAndroid Build Coastguard Worker  store <4 x float> %res0, <4 x float>* %a0, align 16
2065*9880d681SAndroid Build Coastguard Worker  store <4 x float> %res1, <4 x float>* %a1, align 16
2066*9880d681SAndroid Build Coastguard Worker  store <4 x float> %res2, <4 x float>* %a2, align 16
2067*9880d681SAndroid Build Coastguard Worker  store <4 x float> %res3, <4 x float>* %a3, align 16
2068*9880d681SAndroid Build Coastguard Worker  ret void
2069*9880d681SAndroid Build Coastguard Worker}
2070*9880d681SAndroid Build Coastguard Worker
2071*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_ucomieq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
2072*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ucomieq_ss:
2073*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2074*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ucomiss %xmm1, %xmm0
2075*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setnp %al
2076*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    sete %cl
2077*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andb %al, %cl
2078*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzbl %cl, %eax
2079*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2080*9880d681SAndroid Build Coastguard Worker;
2081*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ucomieq_ss:
2082*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2083*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ucomiss %xmm1, %xmm0
2084*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setnp %al
2085*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    sete %cl
2086*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    andb %al, %cl
2087*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movzbl %cl, %eax
2088*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2089*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.ucomieq.ss(<4 x float> %a0, <4 x float> %a1)
2090*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2091*9880d681SAndroid Build Coastguard Worker}
2092*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.ucomieq.ss(<4 x float>, <4 x float>) nounwind readnone
2093*9880d681SAndroid Build Coastguard Worker
2094*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_ucomige_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
2095*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ucomige_ss:
2096*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2097*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
2098*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ucomiss %xmm1, %xmm0
2099*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setae %al
2100*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2101*9880d681SAndroid Build Coastguard Worker;
2102*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ucomige_ss:
2103*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2104*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
2105*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ucomiss %xmm1, %xmm0
2106*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setae %al
2107*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2108*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.ucomige.ss(<4 x float> %a0, <4 x float> %a1)
2109*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2110*9880d681SAndroid Build Coastguard Worker}
2111*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.ucomige.ss(<4 x float>, <4 x float>) nounwind readnone
2112*9880d681SAndroid Build Coastguard Worker
2113*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_ucomigt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
2114*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ucomigt_ss:
2115*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2116*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
2117*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ucomiss %xmm1, %xmm0
2118*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
2119*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2120*9880d681SAndroid Build Coastguard Worker;
2121*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ucomigt_ss:
2122*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2123*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
2124*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ucomiss %xmm1, %xmm0
2125*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
2126*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2127*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.ucomigt.ss(<4 x float> %a0, <4 x float> %a1)
2128*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2129*9880d681SAndroid Build Coastguard Worker}
2130*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.ucomigt.ss(<4 x float>, <4 x float>) nounwind readnone
2131*9880d681SAndroid Build Coastguard Worker
2132*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_ucomile_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
2133*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ucomile_ss:
2134*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2135*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
2136*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ucomiss %xmm0, %xmm1
2137*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setae %al
2138*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2139*9880d681SAndroid Build Coastguard Worker;
2140*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ucomile_ss:
2141*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2142*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
2143*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ucomiss %xmm0, %xmm1
2144*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setae %al
2145*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2146*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.ucomile.ss(<4 x float> %a0, <4 x float> %a1)
2147*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2148*9880d681SAndroid Build Coastguard Worker}
2149*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.ucomile.ss(<4 x float>, <4 x float>) nounwind readnone
2150*9880d681SAndroid Build Coastguard Worker
2151*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_ucomilt_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
2152*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ucomilt_ss:
2153*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2154*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl %eax, %eax
2155*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ucomiss %xmm0, %xmm1
2156*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    seta %al
2157*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2158*9880d681SAndroid Build Coastguard Worker;
2159*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ucomilt_ss:
2160*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2161*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %eax
2162*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ucomiss %xmm0, %xmm1
2163*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    seta %al
2164*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2165*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.ucomilt.ss(<4 x float> %a0, <4 x float> %a1)
2166*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2167*9880d681SAndroid Build Coastguard Worker}
2168*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.ucomilt.ss(<4 x float>, <4 x float>) nounwind readnone
2169*9880d681SAndroid Build Coastguard Worker
2170*9880d681SAndroid Build Coastguard Workerdefine i32 @test_mm_ucomineq_ss(<4 x float> %a0, <4 x float> %a1) nounwind {
2171*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_ucomineq_ss:
2172*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2173*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    ucomiss %xmm1, %xmm0
2174*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setp %al
2175*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    setne %cl
2176*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    orb %al, %cl
2177*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movzbl %cl, %eax
2178*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2179*9880d681SAndroid Build Coastguard Worker;
2180*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_ucomineq_ss:
2181*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2182*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    ucomiss %xmm1, %xmm0
2183*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setp %al
2184*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    setne %cl
2185*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    orb %al, %cl
2186*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movzbl %cl, %eax
2187*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2188*9880d681SAndroid Build Coastguard Worker  %res = call i32 @llvm.x86.sse.ucomineq.ss(<4 x float> %a0, <4 x float> %a1)
2189*9880d681SAndroid Build Coastguard Worker  ret i32 %res
2190*9880d681SAndroid Build Coastguard Worker}
2191*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.x86.sse.ucomineq.ss(<4 x float>, <4 x float>) nounwind readnone
2192*9880d681SAndroid Build Coastguard Worker
2193*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_undefined_ps() {
2194*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_undefined_ps:
2195*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2196*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2197*9880d681SAndroid Build Coastguard Worker;
2198*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_undefined_ps:
2199*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2200*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2201*9880d681SAndroid Build Coastguard Worker  ret <4 x float> undef
2202*9880d681SAndroid Build Coastguard Worker}
2203*9880d681SAndroid Build Coastguard Worker
2204*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_unpackhi_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
2205*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_unpackhi_ps:
2206*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2207*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2208*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2209*9880d681SAndroid Build Coastguard Worker;
2210*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_unpackhi_ps:
2211*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2212*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
2213*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2214*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 2, i32 6, i32 3, i32 7>
2215*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
2216*9880d681SAndroid Build Coastguard Worker}
2217*9880d681SAndroid Build Coastguard Worker
2218*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_unpacklo_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
2219*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_unpacklo_ps:
2220*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2221*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2222*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2223*9880d681SAndroid Build Coastguard Worker;
2224*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_unpacklo_ps:
2225*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2226*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2227*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2228*9880d681SAndroid Build Coastguard Worker  %res = shufflevector <4 x float> %a0, <4 x float> %a1, <4 x i32> <i32 0, i32 4, i32 1, i32 5>
2229*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %res
2230*9880d681SAndroid Build Coastguard Worker}
2231*9880d681SAndroid Build Coastguard Worker
2232*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_mm_xor_ps(<4 x float> %a0, <4 x float> %a1) nounwind {
2233*9880d681SAndroid Build Coastguard Worker; X32-LABEL: test_mm_xor_ps:
2234*9880d681SAndroid Build Coastguard Worker; X32:       # BB#0:
2235*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %ebp
2236*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esp, %ebp
2237*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    pushl %esi
2238*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    andl $-16, %esp
2239*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    subl $64, %esp
2240*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm0, {{[0-9]+}}(%esp)
2241*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
2242*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2243*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
2244*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
2245*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movaps %xmm1, {{[0-9]+}}(%esp)
2246*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl {{[0-9]+}}(%esp), %esi
2247*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %esi, (%esp)
2248*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl {{[0-9]+}}(%esp), %edx
2249*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2250*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl {{[0-9]+}}(%esp), %eax
2251*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2252*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    xorl {{[0-9]+}}(%esp), %ecx
2253*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2254*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2255*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
2256*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
2257*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
2258*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2259*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
2260*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2261*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    leal -4(%ebp), %esp
2262*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %esi
2263*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    popl %ebp
2264*9880d681SAndroid Build Coastguard Worker; X32-NEXT:    retl
2265*9880d681SAndroid Build Coastguard Worker;
2266*9880d681SAndroid Build Coastguard Worker; X64-LABEL: test_mm_xor_ps:
2267*9880d681SAndroid Build Coastguard Worker; X64:       # BB#0:
2268*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm0, -{{[0-9]+}}(%rsp)
2269*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
2270*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %r8
2271*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movaps %xmm1, -{{[0-9]+}}(%rsp)
2272*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rdx
2273*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rdx, %rsi
2274*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %edx
2275*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rax
2276*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx
2277*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movq %rcx, %rdi
2278*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %r8d, %ecx
2279*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %r8
2280*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rsi
2281*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    shrq $32, %rdi
2282*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %ecx, -{{[0-9]+}}(%rsp)
2283*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edx, -{{[0-9]+}}(%rsp)
2284*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %r8d, %edi
2285*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %edi, -{{[0-9]+}}(%rsp)
2286*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    xorl %eax, %esi
2287*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movl %esi, -{{[0-9]+}}(%rsp)
2288*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
2289*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2290*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
2291*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
2292*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    movss {{.*#+}} xmm2 = mem[0],zero,zero,zero
2293*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
2294*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
2295*9880d681SAndroid Build Coastguard Worker; X64-NEXT:    retq
2296*9880d681SAndroid Build Coastguard Worker  %arg0 = bitcast <4 x float> %a0 to <4 x i32>
2297*9880d681SAndroid Build Coastguard Worker  %arg1 = bitcast <4 x float> %a1 to <4 x i32>
2298*9880d681SAndroid Build Coastguard Worker  %res = xor <4 x i32> %arg0, %arg1
2299*9880d681SAndroid Build Coastguard Worker  %bc = bitcast <4 x i32> %res to <4 x float>
2300*9880d681SAndroid Build Coastguard Worker  ret <4 x float> %bc
2301*9880d681SAndroid Build Coastguard Worker}
2302*9880d681SAndroid Build Coastguard Worker
2303*9880d681SAndroid Build Coastguard Worker!0 = !{i32 1}
2304