• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=i686 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
3; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM
4; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
5; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
6; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
7; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
8; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
9; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
10; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
11; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
12; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
13
14define void @test_f2xm1() optsize {
15; GENERIC-LABEL: test_f2xm1:
16; GENERIC:       # %bb.0:
17; GENERIC-NEXT:    #APP
18; GENERIC-NEXT:    f2xm1
19; GENERIC-NEXT:    #NO_APP
20; GENERIC-NEXT:    retl
21;
22; ATOM-LABEL: test_f2xm1:
23; ATOM:       # %bb.0:
24; ATOM-NEXT:    #APP
25; ATOM-NEXT:    f2xm1 # sched: [99:49.50]
26; ATOM-NEXT:    #NO_APP
27; ATOM-NEXT:    retl # sched: [79:39.50]
28;
29; SLM-LABEL: test_f2xm1:
30; SLM:       # %bb.0:
31; SLM-NEXT:    #APP
32; SLM-NEXT:    f2xm1 # sched: [100:1.00]
33; SLM-NEXT:    #NO_APP
34; SLM-NEXT:    retl # sched: [4:1.00]
35;
36; SANDY-LABEL: test_f2xm1:
37; SANDY:       # %bb.0:
38; SANDY-NEXT:    #APP
39; SANDY-NEXT:    f2xm1 # sched: [100:0.33]
40; SANDY-NEXT:    #NO_APP
41; SANDY-NEXT:    retl # sched: [6:1.00]
42;
43; HASWELL-LABEL: test_f2xm1:
44; HASWELL:       # %bb.0:
45; HASWELL-NEXT:    #APP
46; HASWELL-NEXT:    f2xm1 # sched: [100:0.25]
47; HASWELL-NEXT:    #NO_APP
48; HASWELL-NEXT:    retl # sched: [7:1.00]
49;
50; BROADWELL-LABEL: test_f2xm1:
51; BROADWELL:       # %bb.0:
52; BROADWELL-NEXT:    #APP
53; BROADWELL-NEXT:    f2xm1 # sched: [100:0.25]
54; BROADWELL-NEXT:    #NO_APP
55; BROADWELL-NEXT:    retl # sched: [6:0.50]
56;
57; SKYLAKE-LABEL: test_f2xm1:
58; SKYLAKE:       # %bb.0:
59; SKYLAKE-NEXT:    #APP
60; SKYLAKE-NEXT:    f2xm1 # sched: [100:0.25]
61; SKYLAKE-NEXT:    #NO_APP
62; SKYLAKE-NEXT:    retl # sched: [6:0.50]
63;
64; SKX-LABEL: test_f2xm1:
65; SKX:       # %bb.0:
66; SKX-NEXT:    #APP
67; SKX-NEXT:    f2xm1 # sched: [100:0.25]
68; SKX-NEXT:    #NO_APP
69; SKX-NEXT:    retl # sched: [6:0.50]
70;
71; BTVER2-LABEL: test_f2xm1:
72; BTVER2:       # %bb.0:
73; BTVER2-NEXT:    #APP
74; BTVER2-NEXT:    f2xm1 # sched: [100:0.50]
75; BTVER2-NEXT:    #NO_APP
76; BTVER2-NEXT:    retl # sched: [4:1.00]
77;
78; ZNVER1-LABEL: test_f2xm1:
79; ZNVER1:       # %bb.0:
80; ZNVER1-NEXT:    #APP
81; ZNVER1-NEXT:    f2xm1 # sched: [100:0.25]
82; ZNVER1-NEXT:    #NO_APP
83; ZNVER1-NEXT:    retl # sched: [1:0.50]
84  tail call void asm sideeffect "f2xm1", ""() nounwind
85  ret void
86}
87
88define void @test_fabs() optsize {
89; GENERIC-LABEL: test_fabs:
90; GENERIC:       # %bb.0:
91; GENERIC-NEXT:    #APP
92; GENERIC-NEXT:    fabs
93; GENERIC-NEXT:    #NO_APP
94; GENERIC-NEXT:    retl
95;
96; ATOM-LABEL: test_fabs:
97; ATOM:       # %bb.0:
98; ATOM-NEXT:    #APP
99; ATOM-NEXT:    fabs # sched: [1:1.00]
100; ATOM-NEXT:    #NO_APP
101; ATOM-NEXT:    retl # sched: [79:39.50]
102;
103; SLM-LABEL: test_fabs:
104; SLM:       # %bb.0:
105; SLM-NEXT:    #APP
106; SLM-NEXT:    fabs # sched: [1:0.50]
107; SLM-NEXT:    #NO_APP
108; SLM-NEXT:    retl # sched: [4:1.00]
109;
110; SANDY-LABEL: test_fabs:
111; SANDY:       # %bb.0:
112; SANDY-NEXT:    #APP
113; SANDY-NEXT:    fabs # sched: [1:1.00]
114; SANDY-NEXT:    #NO_APP
115; SANDY-NEXT:    retl # sched: [6:1.00]
116;
117; HASWELL-LABEL: test_fabs:
118; HASWELL:       # %bb.0:
119; HASWELL-NEXT:    #APP
120; HASWELL-NEXT:    fabs # sched: [1:1.00]
121; HASWELL-NEXT:    #NO_APP
122; HASWELL-NEXT:    retl # sched: [7:1.00]
123;
124; BROADWELL-LABEL: test_fabs:
125; BROADWELL:       # %bb.0:
126; BROADWELL-NEXT:    #APP
127; BROADWELL-NEXT:    fabs # sched: [1:1.00]
128; BROADWELL-NEXT:    #NO_APP
129; BROADWELL-NEXT:    retl # sched: [6:0.50]
130;
131; SKYLAKE-LABEL: test_fabs:
132; SKYLAKE:       # %bb.0:
133; SKYLAKE-NEXT:    #APP
134; SKYLAKE-NEXT:    fabs # sched: [1:1.00]
135; SKYLAKE-NEXT:    #NO_APP
136; SKYLAKE-NEXT:    retl # sched: [6:0.50]
137;
138; SKX-LABEL: test_fabs:
139; SKX:       # %bb.0:
140; SKX-NEXT:    #APP
141; SKX-NEXT:    fabs # sched: [1:1.00]
142; SKX-NEXT:    #NO_APP
143; SKX-NEXT:    retl # sched: [6:0.50]
144;
145; BTVER2-LABEL: test_fabs:
146; BTVER2:       # %bb.0:
147; BTVER2-NEXT:    #APP
148; BTVER2-NEXT:    fabs # sched: [2:1.00]
149; BTVER2-NEXT:    #NO_APP
150; BTVER2-NEXT:    retl # sched: [4:1.00]
151;
152; ZNVER1-LABEL: test_fabs:
153; ZNVER1:       # %bb.0:
154; ZNVER1-NEXT:    #APP
155; ZNVER1-NEXT:    fabs # sched: [2:1.00]
156; ZNVER1-NEXT:    #NO_APP
157; ZNVER1-NEXT:    retl # sched: [1:0.50]
158  tail call void asm sideeffect "fabs", ""() nounwind
159  ret void
160}
161
162define void @test_fadd(float *%a0, double *%a1) optsize {
163; GENERIC-LABEL: test_fadd:
164; GENERIC:       # %bb.0:
165; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
166; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
167; GENERIC-NEXT:    #APP
168; GENERIC-NEXT:    fadd %st(0), %st(1)
169; GENERIC-NEXT:    fadd %st(2)
170; GENERIC-NEXT:    fadds (%ecx)
171; GENERIC-NEXT:    faddl (%eax)
172; GENERIC-NEXT:    #NO_APP
173; GENERIC-NEXT:    retl
174;
175; ATOM-LABEL: test_fadd:
176; ATOM:       # %bb.0:
177; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
178; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
179; ATOM-NEXT:    #APP
180; ATOM-NEXT:    fadd %st(0), %st(1) # sched: [5:5.00]
181; ATOM-NEXT:    fadd %st(2) # sched: [5:5.00]
182; ATOM-NEXT:    fadds (%ecx) # sched: [5:5.00]
183; ATOM-NEXT:    faddl (%eax) # sched: [5:5.00]
184; ATOM-NEXT:    #NO_APP
185; ATOM-NEXT:    retl # sched: [79:39.50]
186;
187; SLM-LABEL: test_fadd:
188; SLM:       # %bb.0:
189; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
190; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
191; SLM-NEXT:    #APP
192; SLM-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
193; SLM-NEXT:    fadd %st(2) # sched: [3:1.00]
194; SLM-NEXT:    fadds (%ecx) # sched: [6:1.00]
195; SLM-NEXT:    faddl (%eax) # sched: [6:1.00]
196; SLM-NEXT:    #NO_APP
197; SLM-NEXT:    retl # sched: [4:1.00]
198;
199; SANDY-LABEL: test_fadd:
200; SANDY:       # %bb.0:
201; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
202; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
203; SANDY-NEXT:    #APP
204; SANDY-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
205; SANDY-NEXT:    fadd %st(2) # sched: [3:1.00]
206; SANDY-NEXT:    fadds (%ecx) # sched: [10:1.00]
207; SANDY-NEXT:    faddl (%eax) # sched: [10:1.00]
208; SANDY-NEXT:    #NO_APP
209; SANDY-NEXT:    retl # sched: [6:1.00]
210;
211; HASWELL-LABEL: test_fadd:
212; HASWELL:       # %bb.0:
213; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
214; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
215; HASWELL-NEXT:    #APP
216; HASWELL-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
217; HASWELL-NEXT:    fadd %st(2) # sched: [3:1.00]
218; HASWELL-NEXT:    fadds (%ecx) # sched: [10:1.00]
219; HASWELL-NEXT:    faddl (%eax) # sched: [10:1.00]
220; HASWELL-NEXT:    #NO_APP
221; HASWELL-NEXT:    retl # sched: [7:1.00]
222;
223; BROADWELL-LABEL: test_fadd:
224; BROADWELL:       # %bb.0:
225; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
226; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
227; BROADWELL-NEXT:    #APP
228; BROADWELL-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
229; BROADWELL-NEXT:    fadd %st(2) # sched: [3:1.00]
230; BROADWELL-NEXT:    fadds (%ecx) # sched: [9:1.00]
231; BROADWELL-NEXT:    faddl (%eax) # sched: [9:1.00]
232; BROADWELL-NEXT:    #NO_APP
233; BROADWELL-NEXT:    retl # sched: [6:0.50]
234;
235; SKYLAKE-LABEL: test_fadd:
236; SKYLAKE:       # %bb.0:
237; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
238; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
239; SKYLAKE-NEXT:    #APP
240; SKYLAKE-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
241; SKYLAKE-NEXT:    fadd %st(2) # sched: [3:1.00]
242; SKYLAKE-NEXT:    fadds (%ecx) # sched: [10:1.00]
243; SKYLAKE-NEXT:    faddl (%eax) # sched: [10:1.00]
244; SKYLAKE-NEXT:    #NO_APP
245; SKYLAKE-NEXT:    retl # sched: [6:0.50]
246;
247; SKX-LABEL: test_fadd:
248; SKX:       # %bb.0:
249; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
250; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
251; SKX-NEXT:    #APP
252; SKX-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
253; SKX-NEXT:    fadd %st(2) # sched: [3:1.00]
254; SKX-NEXT:    fadds (%ecx) # sched: [10:1.00]
255; SKX-NEXT:    faddl (%eax) # sched: [10:1.00]
256; SKX-NEXT:    #NO_APP
257; SKX-NEXT:    retl # sched: [6:0.50]
258;
259; BTVER2-LABEL: test_fadd:
260; BTVER2:       # %bb.0:
261; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
262; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
263; BTVER2-NEXT:    #APP
264; BTVER2-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
265; BTVER2-NEXT:    fadd %st(2) # sched: [3:1.00]
266; BTVER2-NEXT:    fadds (%ecx) # sched: [8:1.00]
267; BTVER2-NEXT:    faddl (%eax) # sched: [8:1.00]
268; BTVER2-NEXT:    #NO_APP
269; BTVER2-NEXT:    retl # sched: [4:1.00]
270;
271; ZNVER1-LABEL: test_fadd:
272; ZNVER1:       # %bb.0:
273; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
274; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
275; ZNVER1-NEXT:    #APP
276; ZNVER1-NEXT:    fadd %st(0), %st(1) # sched: [3:1.00]
277; ZNVER1-NEXT:    fadd %st(2) # sched: [3:1.00]
278; ZNVER1-NEXT:    fadds (%ecx) # sched: [10:1.00]
279; ZNVER1-NEXT:    faddl (%eax) # sched: [10:1.00]
280; ZNVER1-NEXT:    #NO_APP
281; ZNVER1-NEXT:    retl # sched: [1:0.50]
282  tail call void asm sideeffect "fadd %st(0), %st(1) \0A\09 fadd %st(2), %st(0) \0A\09 fadds $0 \0A\09 faddl $1", "*m,*m"(float *%a0, double *%a1) nounwind
283  ret void
284}
285
286define void @test_faddp_fiadd(i16 *%a0, i32 *%a1) optsize {
287; GENERIC-LABEL: test_faddp_fiadd:
288; GENERIC:       # %bb.0:
289; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
290; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
291; GENERIC-NEXT:    #APP
292; GENERIC-NEXT:    faddp %st(1)
293; GENERIC-NEXT:    faddp %st(2)
294; GENERIC-NEXT:    fiadds (%ecx)
295; GENERIC-NEXT:    fiaddl (%eax)
296; GENERIC-NEXT:    #NO_APP
297; GENERIC-NEXT:    retl
298;
299; ATOM-LABEL: test_faddp_fiadd:
300; ATOM:       # %bb.0:
301; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
302; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
303; ATOM-NEXT:    #APP
304; ATOM-NEXT:    faddp %st(1) # sched: [5:5.00]
305; ATOM-NEXT:    faddp %st(2) # sched: [5:5.00]
306; ATOM-NEXT:    fiadds (%ecx) # sched: [5:5.00]
307; ATOM-NEXT:    fiaddl (%eax) # sched: [5:5.00]
308; ATOM-NEXT:    #NO_APP
309; ATOM-NEXT:    retl # sched: [79:39.50]
310;
311; SLM-LABEL: test_faddp_fiadd:
312; SLM:       # %bb.0:
313; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
314; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
315; SLM-NEXT:    #APP
316; SLM-NEXT:    faddp %st(1) # sched: [3:1.00]
317; SLM-NEXT:    faddp %st(2) # sched: [3:1.00]
318; SLM-NEXT:    fiadds (%ecx) # sched: [6:1.00]
319; SLM-NEXT:    fiaddl (%eax) # sched: [6:1.00]
320; SLM-NEXT:    #NO_APP
321; SLM-NEXT:    retl # sched: [4:1.00]
322;
323; SANDY-LABEL: test_faddp_fiadd:
324; SANDY:       # %bb.0:
325; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
326; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
327; SANDY-NEXT:    #APP
328; SANDY-NEXT:    faddp %st(1) # sched: [3:1.00]
329; SANDY-NEXT:    faddp %st(2) # sched: [3:1.00]
330; SANDY-NEXT:    fiadds (%ecx) # sched: [13:2.00]
331; SANDY-NEXT:    fiaddl (%eax) # sched: [13:2.00]
332; SANDY-NEXT:    #NO_APP
333; SANDY-NEXT:    retl # sched: [6:1.00]
334;
335; HASWELL-LABEL: test_faddp_fiadd:
336; HASWELL:       # %bb.0:
337; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
338; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
339; HASWELL-NEXT:    #APP
340; HASWELL-NEXT:    faddp %st(1) # sched: [3:1.00]
341; HASWELL-NEXT:    faddp %st(2) # sched: [3:1.00]
342; HASWELL-NEXT:    fiadds (%ecx) # sched: [13:2.00]
343; HASWELL-NEXT:    fiaddl (%eax) # sched: [13:2.00]
344; HASWELL-NEXT:    #NO_APP
345; HASWELL-NEXT:    retl # sched: [7:1.00]
346;
347; BROADWELL-LABEL: test_faddp_fiadd:
348; BROADWELL:       # %bb.0:
349; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
350; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
351; BROADWELL-NEXT:    #APP
352; BROADWELL-NEXT:    faddp %st(1) # sched: [3:1.00]
353; BROADWELL-NEXT:    faddp %st(2) # sched: [3:1.00]
354; BROADWELL-NEXT:    fiadds (%ecx) # sched: [12:2.00]
355; BROADWELL-NEXT:    fiaddl (%eax) # sched: [12:2.00]
356; BROADWELL-NEXT:    #NO_APP
357; BROADWELL-NEXT:    retl # sched: [6:0.50]
358;
359; SKYLAKE-LABEL: test_faddp_fiadd:
360; SKYLAKE:       # %bb.0:
361; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
362; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
363; SKYLAKE-NEXT:    #APP
364; SKYLAKE-NEXT:    faddp %st(1) # sched: [3:1.00]
365; SKYLAKE-NEXT:    faddp %st(2) # sched: [3:1.00]
366; SKYLAKE-NEXT:    fiadds (%ecx) # sched: [13:2.00]
367; SKYLAKE-NEXT:    fiaddl (%eax) # sched: [13:2.00]
368; SKYLAKE-NEXT:    #NO_APP
369; SKYLAKE-NEXT:    retl # sched: [6:0.50]
370;
371; SKX-LABEL: test_faddp_fiadd:
372; SKX:       # %bb.0:
373; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
374; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
375; SKX-NEXT:    #APP
376; SKX-NEXT:    faddp %st(1) # sched: [3:1.00]
377; SKX-NEXT:    faddp %st(2) # sched: [3:1.00]
378; SKX-NEXT:    fiadds (%ecx) # sched: [13:2.00]
379; SKX-NEXT:    fiaddl (%eax) # sched: [13:2.00]
380; SKX-NEXT:    #NO_APP
381; SKX-NEXT:    retl # sched: [6:0.50]
382;
383; BTVER2-LABEL: test_faddp_fiadd:
384; BTVER2:       # %bb.0:
385; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
386; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
387; BTVER2-NEXT:    #APP
388; BTVER2-NEXT:    faddp %st(1) # sched: [3:1.00]
389; BTVER2-NEXT:    faddp %st(2) # sched: [3:1.00]
390; BTVER2-NEXT:    fiadds (%ecx) # sched: [8:1.00]
391; BTVER2-NEXT:    fiaddl (%eax) # sched: [8:1.00]
392; BTVER2-NEXT:    #NO_APP
393; BTVER2-NEXT:    retl # sched: [4:1.00]
394;
395; ZNVER1-LABEL: test_faddp_fiadd:
396; ZNVER1:       # %bb.0:
397; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
398; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
399; ZNVER1-NEXT:    #APP
400; ZNVER1-NEXT:    faddp %st(1) # sched: [3:1.00]
401; ZNVER1-NEXT:    faddp %st(2) # sched: [3:1.00]
402; ZNVER1-NEXT:    fiadds (%ecx) # sched: [10:1.00]
403; ZNVER1-NEXT:    fiaddl (%eax) # sched: [10:1.00]
404; ZNVER1-NEXT:    #NO_APP
405; ZNVER1-NEXT:    retl # sched: [1:0.50]
406  tail call void asm sideeffect "faddp \0A\09 faddp %st(2), %st(0) \0A\09 fiadds $0 \0A\09 fiaddl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
407  ret void
408}
409
410define void @test_fbld_fbstp(i8* %a0) optsize {
411; GENERIC-LABEL: test_fbld_fbstp:
412; GENERIC:       # %bb.0:
413; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
414; GENERIC-NEXT:    #APP
415; GENERIC-NEXT:    fbld (%eax)
416; GENERIC-NEXT:    fbstp (%eax)
417; GENERIC-NEXT:    #NO_APP
418; GENERIC-NEXT:    retl
419;
420; ATOM-LABEL: test_fbld_fbstp:
421; ATOM:       # %bb.0:
422; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
423; ATOM-NEXT:    #APP
424; ATOM-NEXT:    fbld (%eax) # sched: [100:0.50]
425; ATOM-NEXT:    fbstp (%eax) # sched: [100:0.50]
426; ATOM-NEXT:    #NO_APP
427; ATOM-NEXT:    retl # sched: [79:39.50]
428;
429; SLM-LABEL: test_fbld_fbstp:
430; SLM:       # %bb.0:
431; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
432; SLM-NEXT:    #APP
433; SLM-NEXT:    fbld (%eax) # sched: [100:1.00]
434; SLM-NEXT:    fbstp (%eax) # sched: [100:1.00]
435; SLM-NEXT:    #NO_APP
436; SLM-NEXT:    retl # sched: [4:1.00]
437;
438; SANDY-LABEL: test_fbld_fbstp:
439; SANDY:       # %bb.0:
440; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
441; SANDY-NEXT:    #APP
442; SANDY-NEXT:    fbld (%eax) # sched: [100:0.33]
443; SANDY-NEXT:    fbstp (%eax) # sched: [100:0.33]
444; SANDY-NEXT:    #NO_APP
445; SANDY-NEXT:    retl # sched: [6:1.00]
446;
447; HASWELL-LABEL: test_fbld_fbstp:
448; HASWELL:       # %bb.0:
449; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
450; HASWELL-NEXT:    #APP
451; HASWELL-NEXT:    fbld (%eax) # sched: [47:10.75]
452; HASWELL-NEXT:    fbstp (%eax) # sched: [1:1.00]
453; HASWELL-NEXT:    #NO_APP
454; HASWELL-NEXT:    retl # sched: [7:1.00]
455;
456; BROADWELL-LABEL: test_fbld_fbstp:
457; BROADWELL:       # %bb.0:
458; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
459; BROADWELL-NEXT:    #APP
460; BROADWELL-NEXT:    fbld (%eax) # sched: [100:0.25]
461; BROADWELL-NEXT:    fbstp (%eax) # sched: [1:1.00]
462; BROADWELL-NEXT:    #NO_APP
463; BROADWELL-NEXT:    retl # sched: [6:0.50]
464;
465; SKYLAKE-LABEL: test_fbld_fbstp:
466; SKYLAKE:       # %bb.0:
467; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
468; SKYLAKE-NEXT:    #APP
469; SKYLAKE-NEXT:    fbld (%eax) # sched: [100:0.25]
470; SKYLAKE-NEXT:    fbstp (%eax) # sched: [1:1.00]
471; SKYLAKE-NEXT:    #NO_APP
472; SKYLAKE-NEXT:    retl # sched: [6:0.50]
473;
474; SKX-LABEL: test_fbld_fbstp:
475; SKX:       # %bb.0:
476; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
477; SKX-NEXT:    #APP
478; SKX-NEXT:    fbld (%eax) # sched: [100:0.25]
479; SKX-NEXT:    fbstp (%eax) # sched: [1:1.00]
480; SKX-NEXT:    #NO_APP
481; SKX-NEXT:    retl # sched: [6:0.50]
482;
483; BTVER2-LABEL: test_fbld_fbstp:
484; BTVER2:       # %bb.0:
485; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
486; BTVER2-NEXT:    #APP
487; BTVER2-NEXT:    fbld (%eax) # sched: [100:0.50]
488; BTVER2-NEXT:    fbstp (%eax) # sched: [100:0.50]
489; BTVER2-NEXT:    #NO_APP
490; BTVER2-NEXT:    retl # sched: [4:1.00]
491;
492; ZNVER1-LABEL: test_fbld_fbstp:
493; ZNVER1:       # %bb.0:
494; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
495; ZNVER1-NEXT:    #APP
496; ZNVER1-NEXT:    fbld (%eax) # sched: [100:0.25]
497; ZNVER1-NEXT:    fbstp (%eax) # sched: [100:0.25]
498; ZNVER1-NEXT:    #NO_APP
499; ZNVER1-NEXT:    retl # sched: [1:0.50]
500  tail call void asm sideeffect "fbld $0 \0A\09 fbstp $0", "*m"(i8 *%a0) nounwind
501  ret void
502}
503
504define void @test_fchs() optsize {
505; GENERIC-LABEL: test_fchs:
506; GENERIC:       # %bb.0:
507; GENERIC-NEXT:    #APP
508; GENERIC-NEXT:    fchs
509; GENERIC-NEXT:    #NO_APP
510; GENERIC-NEXT:    retl
511;
512; ATOM-LABEL: test_fchs:
513; ATOM:       # %bb.0:
514; ATOM-NEXT:    #APP
515; ATOM-NEXT:    fchs # sched: [1:1.00]
516; ATOM-NEXT:    #NO_APP
517; ATOM-NEXT:    retl # sched: [79:39.50]
518;
519; SLM-LABEL: test_fchs:
520; SLM:       # %bb.0:
521; SLM-NEXT:    #APP
522; SLM-NEXT:    fchs # sched: [1:0.50]
523; SLM-NEXT:    #NO_APP
524; SLM-NEXT:    retl # sched: [4:1.00]
525;
526; SANDY-LABEL: test_fchs:
527; SANDY:       # %bb.0:
528; SANDY-NEXT:    #APP
529; SANDY-NEXT:    fchs # sched: [1:1.00]
530; SANDY-NEXT:    #NO_APP
531; SANDY-NEXT:    retl # sched: [6:1.00]
532;
533; HASWELL-LABEL: test_fchs:
534; HASWELL:       # %bb.0:
535; HASWELL-NEXT:    #APP
536; HASWELL-NEXT:    fchs # sched: [1:1.00]
537; HASWELL-NEXT:    #NO_APP
538; HASWELL-NEXT:    retl # sched: [7:1.00]
539;
540; BROADWELL-LABEL: test_fchs:
541; BROADWELL:       # %bb.0:
542; BROADWELL-NEXT:    #APP
543; BROADWELL-NEXT:    fchs # sched: [1:1.00]
544; BROADWELL-NEXT:    #NO_APP
545; BROADWELL-NEXT:    retl # sched: [6:0.50]
546;
547; SKYLAKE-LABEL: test_fchs:
548; SKYLAKE:       # %bb.0:
549; SKYLAKE-NEXT:    #APP
550; SKYLAKE-NEXT:    fchs # sched: [1:1.00]
551; SKYLAKE-NEXT:    #NO_APP
552; SKYLAKE-NEXT:    retl # sched: [6:0.50]
553;
554; SKX-LABEL: test_fchs:
555; SKX:       # %bb.0:
556; SKX-NEXT:    #APP
557; SKX-NEXT:    fchs # sched: [1:1.00]
558; SKX-NEXT:    #NO_APP
559; SKX-NEXT:    retl # sched: [6:0.50]
560;
561; BTVER2-LABEL: test_fchs:
562; BTVER2:       # %bb.0:
563; BTVER2-NEXT:    #APP
564; BTVER2-NEXT:    fchs # sched: [2:1.00]
565; BTVER2-NEXT:    #NO_APP
566; BTVER2-NEXT:    retl # sched: [4:1.00]
567;
568; ZNVER1-LABEL: test_fchs:
569; ZNVER1:       # %bb.0:
570; ZNVER1-NEXT:    #APP
571; ZNVER1-NEXT:    fchs # sched: [1:1.00]
572; ZNVER1-NEXT:    #NO_APP
573; ZNVER1-NEXT:    retl # sched: [1:0.50]
574  tail call void asm sideeffect "fchs", ""() nounwind
575  ret void
576}
577
578define void @test_fclex() optsize {
579; GENERIC-LABEL: test_fclex:
580; GENERIC:       # %bb.0:
581; GENERIC-NEXT:    #APP
582; GENERIC-NEXT:    wait
583; GENERIC-NEXT:    fnclex
584; GENERIC-NEXT:    #NO_APP
585; GENERIC-NEXT:    retl
586;
587; ATOM-LABEL: test_fclex:
588; ATOM:       # %bb.0:
589; ATOM-NEXT:    #APP
590; ATOM-NEXT:    wait # sched: [1:0.50]
591; ATOM-NEXT:    fnclex # sched: [25:12.50]
592; ATOM-NEXT:    #NO_APP
593; ATOM-NEXT:    retl # sched: [79:39.50]
594;
595; SLM-LABEL: test_fclex:
596; SLM:       # %bb.0:
597; SLM-NEXT:    #APP
598; SLM-NEXT:    wait # sched: [100:1.00]
599; SLM-NEXT:    fnclex # sched: [100:1.00]
600; SLM-NEXT:    #NO_APP
601; SLM-NEXT:    retl # sched: [4:1.00]
602;
603; SANDY-LABEL: test_fclex:
604; SANDY:       # %bb.0:
605; SANDY-NEXT:    #APP
606; SANDY-NEXT:    wait # sched: [100:0.33]
607; SANDY-NEXT:    fnclex # sched: [100:0.33]
608; SANDY-NEXT:    #NO_APP
609; SANDY-NEXT:    retl # sched: [6:1.00]
610;
611; HASWELL-LABEL: test_fclex:
612; HASWELL:       # %bb.0:
613; HASWELL-NEXT:    #APP
614; HASWELL-NEXT:    wait # sched: [2:0.50]
615; HASWELL-NEXT:    fnclex # sched: [4:1.00]
616; HASWELL-NEXT:    #NO_APP
617; HASWELL-NEXT:    retl # sched: [7:1.00]
618;
619; BROADWELL-LABEL: test_fclex:
620; BROADWELL:       # %bb.0:
621; BROADWELL-NEXT:    #APP
622; BROADWELL-NEXT:    wait # sched: [2:0.50]
623; BROADWELL-NEXT:    fnclex # sched: [4:1.00]
624; BROADWELL-NEXT:    #NO_APP
625; BROADWELL-NEXT:    retl # sched: [6:0.50]
626;
627; SKYLAKE-LABEL: test_fclex:
628; SKYLAKE:       # %bb.0:
629; SKYLAKE-NEXT:    #APP
630; SKYLAKE-NEXT:    wait # sched: [2:0.50]
631; SKYLAKE-NEXT:    fnclex # sched: [4:1.00]
632; SKYLAKE-NEXT:    #NO_APP
633; SKYLAKE-NEXT:    retl # sched: [6:0.50]
634;
635; SKX-LABEL: test_fclex:
636; SKX:       # %bb.0:
637; SKX-NEXT:    #APP
638; SKX-NEXT:    wait # sched: [2:0.50]
639; SKX-NEXT:    fnclex # sched: [4:1.00]
640; SKX-NEXT:    #NO_APP
641; SKX-NEXT:    retl # sched: [6:0.50]
642;
643; BTVER2-LABEL: test_fclex:
644; BTVER2:       # %bb.0:
645; BTVER2-NEXT:    #APP
646; BTVER2-NEXT:    wait # sched: [100:0.50]
647; BTVER2-NEXT:    fnclex # sched: [100:0.50]
648; BTVER2-NEXT:    #NO_APP
649; BTVER2-NEXT:    retl # sched: [4:1.00]
650;
651; ZNVER1-LABEL: test_fclex:
652; ZNVER1:       # %bb.0:
653; ZNVER1-NEXT:    #APP
654; ZNVER1-NEXT:    wait # sched: [1:1.00]
655; ZNVER1-NEXT:    fnclex # sched: [100:0.25]
656; ZNVER1-NEXT:    #NO_APP
657; ZNVER1-NEXT:    retl # sched: [1:0.50]
658  tail call void asm sideeffect "fclex", ""() nounwind
659  ret void
660}
661
662define void @test_fnclex() optsize {
663; GENERIC-LABEL: test_fnclex:
664; GENERIC:       # %bb.0:
665; GENERIC-NEXT:    #APP
666; GENERIC-NEXT:    fnclex
667; GENERIC-NEXT:    #NO_APP
668; GENERIC-NEXT:    retl
669;
670; ATOM-LABEL: test_fnclex:
671; ATOM:       # %bb.0:
672; ATOM-NEXT:    #APP
673; ATOM-NEXT:    fnclex # sched: [25:12.50]
674; ATOM-NEXT:    #NO_APP
675; ATOM-NEXT:    retl # sched: [79:39.50]
676;
677; SLM-LABEL: test_fnclex:
678; SLM:       # %bb.0:
679; SLM-NEXT:    #APP
680; SLM-NEXT:    fnclex # sched: [100:1.00]
681; SLM-NEXT:    #NO_APP
682; SLM-NEXT:    retl # sched: [4:1.00]
683;
684; SANDY-LABEL: test_fnclex:
685; SANDY:       # %bb.0:
686; SANDY-NEXT:    #APP
687; SANDY-NEXT:    fnclex # sched: [100:0.33]
688; SANDY-NEXT:    #NO_APP
689; SANDY-NEXT:    retl # sched: [6:1.00]
690;
691; HASWELL-LABEL: test_fnclex:
692; HASWELL:       # %bb.0:
693; HASWELL-NEXT:    #APP
694; HASWELL-NEXT:    fnclex # sched: [4:1.00]
695; HASWELL-NEXT:    #NO_APP
696; HASWELL-NEXT:    retl # sched: [7:1.00]
697;
698; BROADWELL-LABEL: test_fnclex:
699; BROADWELL:       # %bb.0:
700; BROADWELL-NEXT:    #APP
701; BROADWELL-NEXT:    fnclex # sched: [4:1.00]
702; BROADWELL-NEXT:    #NO_APP
703; BROADWELL-NEXT:    retl # sched: [6:0.50]
704;
705; SKYLAKE-LABEL: test_fnclex:
706; SKYLAKE:       # %bb.0:
707; SKYLAKE-NEXT:    #APP
708; SKYLAKE-NEXT:    fnclex # sched: [4:1.00]
709; SKYLAKE-NEXT:    #NO_APP
710; SKYLAKE-NEXT:    retl # sched: [6:0.50]
711;
712; SKX-LABEL: test_fnclex:
713; SKX:       # %bb.0:
714; SKX-NEXT:    #APP
715; SKX-NEXT:    fnclex # sched: [4:1.00]
716; SKX-NEXT:    #NO_APP
717; SKX-NEXT:    retl # sched: [6:0.50]
718;
719; BTVER2-LABEL: test_fnclex:
720; BTVER2:       # %bb.0:
721; BTVER2-NEXT:    #APP
722; BTVER2-NEXT:    fnclex # sched: [100:0.50]
723; BTVER2-NEXT:    #NO_APP
724; BTVER2-NEXT:    retl # sched: [4:1.00]
725;
726; ZNVER1-LABEL: test_fnclex:
727; ZNVER1:       # %bb.0:
728; ZNVER1-NEXT:    #APP
729; ZNVER1-NEXT:    fnclex # sched: [100:0.25]
730; ZNVER1-NEXT:    #NO_APP
731; ZNVER1-NEXT:    retl # sched: [1:0.50]
732  tail call void asm sideeffect "fnclex", ""() nounwind
733  ret void
734}
735
736define void @test_fcmov() optsize {
737; GENERIC-LABEL: test_fcmov:
738; GENERIC:       # %bb.0:
739; GENERIC-NEXT:    #APP
740; GENERIC-NEXT:    fcmovb %st(1), %st(0)
741; GENERIC-NEXT:    fcmovbe %st(1), %st(0)
742; GENERIC-NEXT:    fcmove %st(1), %st(0)
743; GENERIC-NEXT:    fcmovnb %st(1), %st(0)
744; GENERIC-NEXT:    fcmovnbe %st(1), %st(0)
745; GENERIC-NEXT:    fcmovne %st(1), %st(0)
746; GENERIC-NEXT:    fcmovnu %st(1), %st(0)
747; GENERIC-NEXT:    fcmovu %st(1), %st(0)
748; GENERIC-NEXT:    #NO_APP
749; GENERIC-NEXT:    retl
750;
751; ATOM-LABEL: test_fcmov:
752; ATOM:       # %bb.0:
753; ATOM-NEXT:    #APP
754; ATOM-NEXT:    fcmovb %st(1), %st(0) # sched: [9:4.50]
755; ATOM-NEXT:    fcmovbe %st(1), %st(0) # sched: [9:4.50]
756; ATOM-NEXT:    fcmove %st(1), %st(0) # sched: [9:4.50]
757; ATOM-NEXT:    fcmovnb %st(1), %st(0) # sched: [9:4.50]
758; ATOM-NEXT:    fcmovnbe %st(1), %st(0) # sched: [9:4.50]
759; ATOM-NEXT:    fcmovne %st(1), %st(0) # sched: [9:4.50]
760; ATOM-NEXT:    fcmovnu %st(1), %st(0) # sched: [9:4.50]
761; ATOM-NEXT:    fcmovu %st(1), %st(0) # sched: [9:4.50]
762; ATOM-NEXT:    #NO_APP
763; ATOM-NEXT:    retl # sched: [79:39.50]
764;
765; SLM-LABEL: test_fcmov:
766; SLM:       # %bb.0:
767; SLM-NEXT:    #APP
768; SLM-NEXT:    fcmovb %st(1), %st(0) # sched: [3:1.00]
769; SLM-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:1.00]
770; SLM-NEXT:    fcmove %st(1), %st(0) # sched: [3:1.00]
771; SLM-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:1.00]
772; SLM-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:1.00]
773; SLM-NEXT:    fcmovne %st(1), %st(0) # sched: [3:1.00]
774; SLM-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:1.00]
775; SLM-NEXT:    fcmovu %st(1), %st(0) # sched: [3:1.00]
776; SLM-NEXT:    #NO_APP
777; SLM-NEXT:    retl # sched: [4:1.00]
778;
779; SANDY-LABEL: test_fcmov:
780; SANDY:       # %bb.0:
781; SANDY-NEXT:    #APP
782; SANDY-NEXT:    fcmovb %st(1), %st(0) # sched: [3:2.00]
783; SANDY-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:2.00]
784; SANDY-NEXT:    fcmove %st(1), %st(0) # sched: [3:2.00]
785; SANDY-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:2.00]
786; SANDY-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:2.00]
787; SANDY-NEXT:    fcmovne %st(1), %st(0) # sched: [3:2.00]
788; SANDY-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:2.00]
789; SANDY-NEXT:    fcmovu %st(1), %st(0) # sched: [3:2.00]
790; SANDY-NEXT:    #NO_APP
791; SANDY-NEXT:    retl # sched: [6:1.00]
792;
793; HASWELL-LABEL: test_fcmov:
794; HASWELL:       # %bb.0:
795; HASWELL-NEXT:    #APP
796; HASWELL-NEXT:    fcmovb %st(1), %st(0) # sched: [3:1.00]
797; HASWELL-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:1.00]
798; HASWELL-NEXT:    fcmove %st(1), %st(0) # sched: [3:1.00]
799; HASWELL-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:1.00]
800; HASWELL-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:1.00]
801; HASWELL-NEXT:    fcmovne %st(1), %st(0) # sched: [3:1.00]
802; HASWELL-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:1.00]
803; HASWELL-NEXT:    fcmovu %st(1), %st(0) # sched: [3:1.00]
804; HASWELL-NEXT:    #NO_APP
805; HASWELL-NEXT:    retl # sched: [7:1.00]
806;
807; BROADWELL-LABEL: test_fcmov:
808; BROADWELL:       # %bb.0:
809; BROADWELL-NEXT:    #APP
810; BROADWELL-NEXT:    fcmovb %st(1), %st(0) # sched: [3:1.00]
811; BROADWELL-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:1.00]
812; BROADWELL-NEXT:    fcmove %st(1), %st(0) # sched: [3:1.00]
813; BROADWELL-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:1.00]
814; BROADWELL-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:1.00]
815; BROADWELL-NEXT:    fcmovne %st(1), %st(0) # sched: [3:1.00]
816; BROADWELL-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:1.00]
817; BROADWELL-NEXT:    fcmovu %st(1), %st(0) # sched: [3:1.00]
818; BROADWELL-NEXT:    #NO_APP
819; BROADWELL-NEXT:    retl # sched: [6:0.50]
820;
821; SKYLAKE-LABEL: test_fcmov:
822; SKYLAKE:       # %bb.0:
823; SKYLAKE-NEXT:    #APP
824; SKYLAKE-NEXT:    fcmovb %st(1), %st(0) # sched: [3:1.00]
825; SKYLAKE-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:1.00]
826; SKYLAKE-NEXT:    fcmove %st(1), %st(0) # sched: [3:1.00]
827; SKYLAKE-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:1.00]
828; SKYLAKE-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:1.00]
829; SKYLAKE-NEXT:    fcmovne %st(1), %st(0) # sched: [3:1.00]
830; SKYLAKE-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:1.00]
831; SKYLAKE-NEXT:    fcmovu %st(1), %st(0) # sched: [3:1.00]
832; SKYLAKE-NEXT:    #NO_APP
833; SKYLAKE-NEXT:    retl # sched: [6:0.50]
834;
835; SKX-LABEL: test_fcmov:
836; SKX:       # %bb.0:
837; SKX-NEXT:    #APP
838; SKX-NEXT:    fcmovb %st(1), %st(0) # sched: [3:1.00]
839; SKX-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:1.00]
840; SKX-NEXT:    fcmove %st(1), %st(0) # sched: [3:1.00]
841; SKX-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:1.00]
842; SKX-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:1.00]
843; SKX-NEXT:    fcmovne %st(1), %st(0) # sched: [3:1.00]
844; SKX-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:1.00]
845; SKX-NEXT:    fcmovu %st(1), %st(0) # sched: [3:1.00]
846; SKX-NEXT:    #NO_APP
847; SKX-NEXT:    retl # sched: [6:0.50]
848;
849; BTVER2-LABEL: test_fcmov:
850; BTVER2:       # %bb.0:
851; BTVER2-NEXT:    #APP
852; BTVER2-NEXT:    fcmovb %st(1), %st(0) # sched: [3:1.00]
853; BTVER2-NEXT:    fcmovbe %st(1), %st(0) # sched: [3:1.00]
854; BTVER2-NEXT:    fcmove %st(1), %st(0) # sched: [3:1.00]
855; BTVER2-NEXT:    fcmovnb %st(1), %st(0) # sched: [3:1.00]
856; BTVER2-NEXT:    fcmovnbe %st(1), %st(0) # sched: [3:1.00]
857; BTVER2-NEXT:    fcmovne %st(1), %st(0) # sched: [3:1.00]
858; BTVER2-NEXT:    fcmovnu %st(1), %st(0) # sched: [3:1.00]
859; BTVER2-NEXT:    fcmovu %st(1), %st(0) # sched: [3:1.00]
860; BTVER2-NEXT:    #NO_APP
861; BTVER2-NEXT:    retl # sched: [4:1.00]
862;
863; ZNVER1-LABEL: test_fcmov:
864; ZNVER1:       # %bb.0:
865; ZNVER1-NEXT:    #APP
866; ZNVER1-NEXT:    fcmovb %st(1), %st(0) # sched: [100:0.25]
867; ZNVER1-NEXT:    fcmovbe %st(1), %st(0) # sched: [100:0.25]
868; ZNVER1-NEXT:    fcmove %st(1), %st(0) # sched: [100:0.25]
869; ZNVER1-NEXT:    fcmovnb %st(1), %st(0) # sched: [100:0.25]
870; ZNVER1-NEXT:    fcmovnbe %st(1), %st(0) # sched: [100:0.25]
871; ZNVER1-NEXT:    fcmovne %st(1), %st(0) # sched: [100:0.25]
872; ZNVER1-NEXT:    fcmovnu %st(1), %st(0) # sched: [100:0.25]
873; ZNVER1-NEXT:    fcmovu %st(1), %st(0) # sched: [100:0.25]
874; ZNVER1-NEXT:    #NO_APP
875; ZNVER1-NEXT:    retl # sched: [1:0.50]
876  tail call void asm sideeffect "fcmovb %st(1), %st(0) \0A\09 fcmovbe %st(1), %st(0) \0A\09 fcmove %st(1), %st(0) \0A\09 fcmovnb %st(1), %st(0) \0A\09 fcmovnbe %st(1), %st(0) \0A\09 fcmovne %st(1), %st(0) \0A\09 fcmovnu %st(1), %st(0) \0A\09 fcmovu %st(1), %st(0)", ""() nounwind
877  ret void
878}
879
880define void @test_fcom(float *%a0, double *%a1) optsize {
881; GENERIC-LABEL: test_fcom:
882; GENERIC:       # %bb.0:
883; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
884; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
885; GENERIC-NEXT:    #APP
886; GENERIC-NEXT:    fcom %st(1)
887; GENERIC-NEXT:    fcom %st(3)
888; GENERIC-NEXT:    fcoms (%ecx)
889; GENERIC-NEXT:    fcoml (%eax)
890; GENERIC-NEXT:    #NO_APP
891; GENERIC-NEXT:    retl
892;
893; ATOM-LABEL: test_fcom:
894; ATOM:       # %bb.0:
895; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
896; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
897; ATOM-NEXT:    #APP
898; ATOM-NEXT:    fcom %st(1) # sched: [5:5.00]
899; ATOM-NEXT:    fcom %st(3) # sched: [5:5.00]
900; ATOM-NEXT:    fcoms (%ecx) # sched: [5:5.00]
901; ATOM-NEXT:    fcoml (%eax) # sched: [5:5.00]
902; ATOM-NEXT:    #NO_APP
903; ATOM-NEXT:    retl # sched: [79:39.50]
904;
905; SLM-LABEL: test_fcom:
906; SLM:       # %bb.0:
907; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
908; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
909; SLM-NEXT:    #APP
910; SLM-NEXT:    fcom %st(1) # sched: [3:1.00]
911; SLM-NEXT:    fcom %st(3) # sched: [3:1.00]
912; SLM-NEXT:    fcoms (%ecx) # sched: [6:1.00]
913; SLM-NEXT:    fcoml (%eax) # sched: [6:1.00]
914; SLM-NEXT:    #NO_APP
915; SLM-NEXT:    retl # sched: [4:1.00]
916;
917; SANDY-LABEL: test_fcom:
918; SANDY:       # %bb.0:
919; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
920; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
921; SANDY-NEXT:    #APP
922; SANDY-NEXT:    fcom %st(1) # sched: [1:1.00]
923; SANDY-NEXT:    fcom %st(3) # sched: [1:1.00]
924; SANDY-NEXT:    fcoms (%ecx) # sched: [8:1.00]
925; SANDY-NEXT:    fcoml (%eax) # sched: [8:1.00]
926; SANDY-NEXT:    #NO_APP
927; SANDY-NEXT:    retl # sched: [6:1.00]
928;
929; HASWELL-LABEL: test_fcom:
930; HASWELL:       # %bb.0:
931; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
932; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
933; HASWELL-NEXT:    #APP
934; HASWELL-NEXT:    fcom %st(1) # sched: [1:1.00]
935; HASWELL-NEXT:    fcom %st(3) # sched: [1:1.00]
936; HASWELL-NEXT:    fcoms (%ecx) # sched: [8:1.00]
937; HASWELL-NEXT:    fcoml (%eax) # sched: [8:1.00]
938; HASWELL-NEXT:    #NO_APP
939; HASWELL-NEXT:    retl # sched: [7:1.00]
940;
941; BROADWELL-LABEL: test_fcom:
942; BROADWELL:       # %bb.0:
943; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
944; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
945; BROADWELL-NEXT:    #APP
946; BROADWELL-NEXT:    fcom %st(1) # sched: [1:1.00]
947; BROADWELL-NEXT:    fcom %st(3) # sched: [1:1.00]
948; BROADWELL-NEXT:    fcoms (%ecx) # sched: [7:1.00]
949; BROADWELL-NEXT:    fcoml (%eax) # sched: [7:1.00]
950; BROADWELL-NEXT:    #NO_APP
951; BROADWELL-NEXT:    retl # sched: [6:0.50]
952;
953; SKYLAKE-LABEL: test_fcom:
954; SKYLAKE:       # %bb.0:
955; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
956; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
957; SKYLAKE-NEXT:    #APP
958; SKYLAKE-NEXT:    fcom %st(1) # sched: [1:1.00]
959; SKYLAKE-NEXT:    fcom %st(3) # sched: [1:1.00]
960; SKYLAKE-NEXT:    fcoms (%ecx) # sched: [8:1.00]
961; SKYLAKE-NEXT:    fcoml (%eax) # sched: [8:1.00]
962; SKYLAKE-NEXT:    #NO_APP
963; SKYLAKE-NEXT:    retl # sched: [6:0.50]
964;
965; SKX-LABEL: test_fcom:
966; SKX:       # %bb.0:
967; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
968; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
969; SKX-NEXT:    #APP
970; SKX-NEXT:    fcom %st(1) # sched: [1:1.00]
971; SKX-NEXT:    fcom %st(3) # sched: [1:1.00]
972; SKX-NEXT:    fcoms (%ecx) # sched: [8:1.00]
973; SKX-NEXT:    fcoml (%eax) # sched: [8:1.00]
974; SKX-NEXT:    #NO_APP
975; SKX-NEXT:    retl # sched: [6:0.50]
976;
977; BTVER2-LABEL: test_fcom:
978; BTVER2:       # %bb.0:
979; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
980; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
981; BTVER2-NEXT:    #APP
982; BTVER2-NEXT:    fcom %st(1) # sched: [3:1.00]
983; BTVER2-NEXT:    fcom %st(3) # sched: [3:1.00]
984; BTVER2-NEXT:    fcoms (%ecx) # sched: [8:1.00]
985; BTVER2-NEXT:    fcoml (%eax) # sched: [8:1.00]
986; BTVER2-NEXT:    #NO_APP
987; BTVER2-NEXT:    retl # sched: [4:1.00]
988;
989; ZNVER1-LABEL: test_fcom:
990; ZNVER1:       # %bb.0:
991; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
992; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
993; ZNVER1-NEXT:    #APP
994; ZNVER1-NEXT:    fcom %st(1) # sched: [1:1.00]
995; ZNVER1-NEXT:    fcom %st(3) # sched: [1:1.00]
996; ZNVER1-NEXT:    fcoms (%ecx) # sched: [8:1.00]
997; ZNVER1-NEXT:    fcoml (%eax) # sched: [8:1.00]
998; ZNVER1-NEXT:    #NO_APP
999; ZNVER1-NEXT:    retl # sched: [1:0.50]
1000  tail call void asm sideeffect "fcom \0A\09 fcom %st(3) \0A\09 fcoms $0 \0A\09 fcoml $1", "*m,*m"(float *%a0, double *%a1) nounwind
1001  ret void
1002}
1003
1004define void @test_fcomp_fcompp(float *%a0, double *%a1) optsize {
1005; GENERIC-LABEL: test_fcomp_fcompp:
1006; GENERIC:       # %bb.0:
1007; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1008; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1009; GENERIC-NEXT:    #APP
1010; GENERIC-NEXT:    fcomp %st(1)
1011; GENERIC-NEXT:    fcomp %st(3)
1012; GENERIC-NEXT:    fcomps (%ecx)
1013; GENERIC-NEXT:    fcompl (%eax)
1014; GENERIC-NEXT:    fcompp
1015; GENERIC-NEXT:    #NO_APP
1016; GENERIC-NEXT:    retl
1017;
1018; ATOM-LABEL: test_fcomp_fcompp:
1019; ATOM:       # %bb.0:
1020; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1021; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1022; ATOM-NEXT:    #APP
1023; ATOM-NEXT:    fcomp %st(1) # sched: [5:5.00]
1024; ATOM-NEXT:    fcomp %st(3) # sched: [5:5.00]
1025; ATOM-NEXT:    fcomps (%ecx) # sched: [5:5.00]
1026; ATOM-NEXT:    fcompl (%eax) # sched: [5:5.00]
1027; ATOM-NEXT:    fcompp # sched: [1:1.00]
1028; ATOM-NEXT:    #NO_APP
1029; ATOM-NEXT:    retl # sched: [79:39.50]
1030;
1031; SLM-LABEL: test_fcomp_fcompp:
1032; SLM:       # %bb.0:
1033; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1034; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1035; SLM-NEXT:    #APP
1036; SLM-NEXT:    fcomp %st(1) # sched: [3:1.00]
1037; SLM-NEXT:    fcomp %st(3) # sched: [3:1.00]
1038; SLM-NEXT:    fcomps (%ecx) # sched: [6:1.00]
1039; SLM-NEXT:    fcompl (%eax) # sched: [6:1.00]
1040; SLM-NEXT:    fcompp # sched: [100:1.00]
1041; SLM-NEXT:    #NO_APP
1042; SLM-NEXT:    retl # sched: [4:1.00]
1043;
1044; SANDY-LABEL: test_fcomp_fcompp:
1045; SANDY:       # %bb.0:
1046; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1047; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1048; SANDY-NEXT:    #APP
1049; SANDY-NEXT:    fcomp %st(1) # sched: [1:1.00]
1050; SANDY-NEXT:    fcomp %st(3) # sched: [1:1.00]
1051; SANDY-NEXT:    fcomps (%ecx) # sched: [8:1.00]
1052; SANDY-NEXT:    fcompl (%eax) # sched: [8:1.00]
1053; SANDY-NEXT:    fcompp # sched: [100:0.33]
1054; SANDY-NEXT:    #NO_APP
1055; SANDY-NEXT:    retl # sched: [6:1.00]
1056;
1057; HASWELL-LABEL: test_fcomp_fcompp:
1058; HASWELL:       # %bb.0:
1059; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1060; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1061; HASWELL-NEXT:    #APP
1062; HASWELL-NEXT:    fcomp %st(1) # sched: [1:1.00]
1063; HASWELL-NEXT:    fcomp %st(3) # sched: [1:1.00]
1064; HASWELL-NEXT:    fcomps (%ecx) # sched: [8:1.00]
1065; HASWELL-NEXT:    fcompl (%eax) # sched: [8:1.00]
1066; HASWELL-NEXT:    fcompp # sched: [1:0.50]
1067; HASWELL-NEXT:    #NO_APP
1068; HASWELL-NEXT:    retl # sched: [7:1.00]
1069;
1070; BROADWELL-LABEL: test_fcomp_fcompp:
1071; BROADWELL:       # %bb.0:
1072; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1073; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1074; BROADWELL-NEXT:    #APP
1075; BROADWELL-NEXT:    fcomp %st(1) # sched: [1:1.00]
1076; BROADWELL-NEXT:    fcomp %st(3) # sched: [1:1.00]
1077; BROADWELL-NEXT:    fcomps (%ecx) # sched: [7:1.00]
1078; BROADWELL-NEXT:    fcompl (%eax) # sched: [7:1.00]
1079; BROADWELL-NEXT:    fcompp # sched: [100:0.25]
1080; BROADWELL-NEXT:    #NO_APP
1081; BROADWELL-NEXT:    retl # sched: [6:0.50]
1082;
1083; SKYLAKE-LABEL: test_fcomp_fcompp:
1084; SKYLAKE:       # %bb.0:
1085; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1086; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1087; SKYLAKE-NEXT:    #APP
1088; SKYLAKE-NEXT:    fcomp %st(1) # sched: [1:1.00]
1089; SKYLAKE-NEXT:    fcomp %st(3) # sched: [1:1.00]
1090; SKYLAKE-NEXT:    fcomps (%ecx) # sched: [8:1.00]
1091; SKYLAKE-NEXT:    fcompl (%eax) # sched: [8:1.00]
1092; SKYLAKE-NEXT:    fcompp # sched: [100:0.25]
1093; SKYLAKE-NEXT:    #NO_APP
1094; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1095;
1096; SKX-LABEL: test_fcomp_fcompp:
1097; SKX:       # %bb.0:
1098; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1099; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1100; SKX-NEXT:    #APP
1101; SKX-NEXT:    fcomp %st(1) # sched: [1:1.00]
1102; SKX-NEXT:    fcomp %st(3) # sched: [1:1.00]
1103; SKX-NEXT:    fcomps (%ecx) # sched: [8:1.00]
1104; SKX-NEXT:    fcompl (%eax) # sched: [8:1.00]
1105; SKX-NEXT:    fcompp # sched: [100:0.25]
1106; SKX-NEXT:    #NO_APP
1107; SKX-NEXT:    retl # sched: [6:0.50]
1108;
1109; BTVER2-LABEL: test_fcomp_fcompp:
1110; BTVER2:       # %bb.0:
1111; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1112; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1113; BTVER2-NEXT:    #APP
1114; BTVER2-NEXT:    fcomp %st(1) # sched: [3:1.00]
1115; BTVER2-NEXT:    fcomp %st(3) # sched: [3:1.00]
1116; BTVER2-NEXT:    fcomps (%ecx) # sched: [8:1.00]
1117; BTVER2-NEXT:    fcompl (%eax) # sched: [8:1.00]
1118; BTVER2-NEXT:    fcompp # sched: [100:0.50]
1119; BTVER2-NEXT:    #NO_APP
1120; BTVER2-NEXT:    retl # sched: [4:1.00]
1121;
1122; ZNVER1-LABEL: test_fcomp_fcompp:
1123; ZNVER1:       # %bb.0:
1124; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1125; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1126; ZNVER1-NEXT:    #APP
1127; ZNVER1-NEXT:    fcomp %st(1) # sched: [1:1.00]
1128; ZNVER1-NEXT:    fcomp %st(3) # sched: [1:1.00]
1129; ZNVER1-NEXT:    fcomps (%ecx) # sched: [8:1.00]
1130; ZNVER1-NEXT:    fcompl (%eax) # sched: [8:1.00]
1131; ZNVER1-NEXT:    fcompp # sched: [1:1.00]
1132; ZNVER1-NEXT:    #NO_APP
1133; ZNVER1-NEXT:    retl # sched: [1:0.50]
1134  tail call void asm sideeffect "fcomp \0A\09 fcomp %st(3) \0A\09 fcomps $0 \0A\09 fcompl $1 \0A\09 fcompp", "*m,*m"(float *%a0, double *%a1) nounwind
1135  ret void
1136}
1137
1138define void @test_fcomi_fcomip() optsize {
1139; GENERIC-LABEL: test_fcomi_fcomip:
1140; GENERIC:       # %bb.0:
1141; GENERIC-NEXT:    #APP
1142; GENERIC-NEXT:    fcomi %st(3)
1143; GENERIC-NEXT:    fcompi %st(3)
1144; GENERIC-NEXT:    #NO_APP
1145; GENERIC-NEXT:    retl
1146;
1147; ATOM-LABEL: test_fcomi_fcomip:
1148; ATOM:       # %bb.0:
1149; ATOM-NEXT:    #APP
1150; ATOM-NEXT:    fcomi %st(3) # sched: [9:4.50]
1151; ATOM-NEXT:    fcompi %st(3) # sched: [9:4.50]
1152; ATOM-NEXT:    #NO_APP
1153; ATOM-NEXT:    retl # sched: [79:39.50]
1154;
1155; SLM-LABEL: test_fcomi_fcomip:
1156; SLM:       # %bb.0:
1157; SLM-NEXT:    #APP
1158; SLM-NEXT:    fcomi %st(3) # sched: [3:1.00]
1159; SLM-NEXT:    fcompi %st(3) # sched: [3:1.00]
1160; SLM-NEXT:    #NO_APP
1161; SLM-NEXT:    retl # sched: [4:1.00]
1162;
1163; SANDY-LABEL: test_fcomi_fcomip:
1164; SANDY:       # %bb.0:
1165; SANDY-NEXT:    #APP
1166; SANDY-NEXT:    fcomi %st(3) # sched: [3:1.00]
1167; SANDY-NEXT:    fcompi %st(3) # sched: [3:1.00]
1168; SANDY-NEXT:    #NO_APP
1169; SANDY-NEXT:    retl # sched: [6:1.00]
1170;
1171; HASWELL-LABEL: test_fcomi_fcomip:
1172; HASWELL:       # %bb.0:
1173; HASWELL-NEXT:    #APP
1174; HASWELL-NEXT:    fcomi %st(3) # sched: [1:0.50]
1175; HASWELL-NEXT:    fcompi %st(3) # sched: [1:0.50]
1176; HASWELL-NEXT:    #NO_APP
1177; HASWELL-NEXT:    retl # sched: [7:1.00]
1178;
1179; BROADWELL-LABEL: test_fcomi_fcomip:
1180; BROADWELL:       # %bb.0:
1181; BROADWELL-NEXT:    #APP
1182; BROADWELL-NEXT:    fcomi %st(3) # sched: [3:1.00]
1183; BROADWELL-NEXT:    fcompi %st(3) # sched: [3:1.00]
1184; BROADWELL-NEXT:    #NO_APP
1185; BROADWELL-NEXT:    retl # sched: [6:0.50]
1186;
1187; SKYLAKE-LABEL: test_fcomi_fcomip:
1188; SKYLAKE:       # %bb.0:
1189; SKYLAKE-NEXT:    #APP
1190; SKYLAKE-NEXT:    fcomi %st(3) # sched: [2:1.00]
1191; SKYLAKE-NEXT:    fcompi %st(3) # sched: [2:1.00]
1192; SKYLAKE-NEXT:    #NO_APP
1193; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1194;
1195; SKX-LABEL: test_fcomi_fcomip:
1196; SKX:       # %bb.0:
1197; SKX-NEXT:    #APP
1198; SKX-NEXT:    fcomi %st(3) # sched: [2:1.00]
1199; SKX-NEXT:    fcompi %st(3) # sched: [2:1.00]
1200; SKX-NEXT:    #NO_APP
1201; SKX-NEXT:    retl # sched: [6:0.50]
1202;
1203; BTVER2-LABEL: test_fcomi_fcomip:
1204; BTVER2:       # %bb.0:
1205; BTVER2-NEXT:    #APP
1206; BTVER2-NEXT:    fcomi %st(3) # sched: [3:1.00]
1207; BTVER2-NEXT:    fcompi %st(3) # sched: [3:1.00]
1208; BTVER2-NEXT:    #NO_APP
1209; BTVER2-NEXT:    retl # sched: [4:1.00]
1210;
1211; ZNVER1-LABEL: test_fcomi_fcomip:
1212; ZNVER1:       # %bb.0:
1213; ZNVER1-NEXT:    #APP
1214; ZNVER1-NEXT:    fcomi %st(3) # sched: [9:0.50]
1215; ZNVER1-NEXT:    fcompi %st(3) # sched: [9:0.50]
1216; ZNVER1-NEXT:    #NO_APP
1217; ZNVER1-NEXT:    retl # sched: [1:0.50]
1218  tail call void asm sideeffect "fcomi %st(3) \0A\09 fcomip %st(3)", ""() nounwind
1219  ret void
1220}
1221
1222define void @test_fcos() optsize {
1223; GENERIC-LABEL: test_fcos:
1224; GENERIC:       # %bb.0:
1225; GENERIC-NEXT:    #APP
1226; GENERIC-NEXT:    fcos
1227; GENERIC-NEXT:    #NO_APP
1228; GENERIC-NEXT:    retl
1229;
1230; ATOM-LABEL: test_fcos:
1231; ATOM:       # %bb.0:
1232; ATOM-NEXT:    #APP
1233; ATOM-NEXT:    fcos # sched: [174:87.00]
1234; ATOM-NEXT:    #NO_APP
1235; ATOM-NEXT:    retl # sched: [79:39.50]
1236;
1237; SLM-LABEL: test_fcos:
1238; SLM:       # %bb.0:
1239; SLM-NEXT:    #APP
1240; SLM-NEXT:    fcos # sched: [100:1.00]
1241; SLM-NEXT:    #NO_APP
1242; SLM-NEXT:    retl # sched: [4:1.00]
1243;
1244; SANDY-LABEL: test_fcos:
1245; SANDY:       # %bb.0:
1246; SANDY-NEXT:    #APP
1247; SANDY-NEXT:    fcos # sched: [100:0.33]
1248; SANDY-NEXT:    #NO_APP
1249; SANDY-NEXT:    retl # sched: [6:1.00]
1250;
1251; HASWELL-LABEL: test_fcos:
1252; HASWELL:       # %bb.0:
1253; HASWELL-NEXT:    #APP
1254; HASWELL-NEXT:    fcos # sched: [100:0.25]
1255; HASWELL-NEXT:    #NO_APP
1256; HASWELL-NEXT:    retl # sched: [7:1.00]
1257;
1258; BROADWELL-LABEL: test_fcos:
1259; BROADWELL:       # %bb.0:
1260; BROADWELL-NEXT:    #APP
1261; BROADWELL-NEXT:    fcos # sched: [100:0.25]
1262; BROADWELL-NEXT:    #NO_APP
1263; BROADWELL-NEXT:    retl # sched: [6:0.50]
1264;
1265; SKYLAKE-LABEL: test_fcos:
1266; SKYLAKE:       # %bb.0:
1267; SKYLAKE-NEXT:    #APP
1268; SKYLAKE-NEXT:    fcos # sched: [100:0.25]
1269; SKYLAKE-NEXT:    #NO_APP
1270; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1271;
1272; SKX-LABEL: test_fcos:
1273; SKX:       # %bb.0:
1274; SKX-NEXT:    #APP
1275; SKX-NEXT:    fcos # sched: [100:0.25]
1276; SKX-NEXT:    #NO_APP
1277; SKX-NEXT:    retl # sched: [6:0.50]
1278;
1279; BTVER2-LABEL: test_fcos:
1280; BTVER2:       # %bb.0:
1281; BTVER2-NEXT:    #APP
1282; BTVER2-NEXT:    fcos # sched: [100:0.50]
1283; BTVER2-NEXT:    #NO_APP
1284; BTVER2-NEXT:    retl # sched: [4:1.00]
1285;
1286; ZNVER1-LABEL: test_fcos:
1287; ZNVER1:       # %bb.0:
1288; ZNVER1-NEXT:    #APP
1289; ZNVER1-NEXT:    fcos # sched: [100:0.25]
1290; ZNVER1-NEXT:    #NO_APP
1291; ZNVER1-NEXT:    retl # sched: [1:0.50]
1292  tail call void asm sideeffect "fcos", ""() nounwind
1293  ret void
1294}
1295
1296define void @test_fdecstp() optsize {
1297; GENERIC-LABEL: test_fdecstp:
1298; GENERIC:       # %bb.0:
1299; GENERIC-NEXT:    #APP
1300; GENERIC-NEXT:    fdecstp
1301; GENERIC-NEXT:    #NO_APP
1302; GENERIC-NEXT:    retl
1303;
1304; ATOM-LABEL: test_fdecstp:
1305; ATOM:       # %bb.0:
1306; ATOM-NEXT:    #APP
1307; ATOM-NEXT:    fdecstp # sched: [1:0.50]
1308; ATOM-NEXT:    #NO_APP
1309; ATOM-NEXT:    retl # sched: [79:39.50]
1310;
1311; SLM-LABEL: test_fdecstp:
1312; SLM:       # %bb.0:
1313; SLM-NEXT:    #APP
1314; SLM-NEXT:    fdecstp # sched: [100:1.00]
1315; SLM-NEXT:    #NO_APP
1316; SLM-NEXT:    retl # sched: [4:1.00]
1317;
1318; SANDY-LABEL: test_fdecstp:
1319; SANDY:       # %bb.0:
1320; SANDY-NEXT:    #APP
1321; SANDY-NEXT:    fdecstp # sched: [1:1.00]
1322; SANDY-NEXT:    #NO_APP
1323; SANDY-NEXT:    retl # sched: [6:1.00]
1324;
1325; HASWELL-LABEL: test_fdecstp:
1326; HASWELL:       # %bb.0:
1327; HASWELL-NEXT:    #APP
1328; HASWELL-NEXT:    fdecstp # sched: [2:1.00]
1329; HASWELL-NEXT:    #NO_APP
1330; HASWELL-NEXT:    retl # sched: [7:1.00]
1331;
1332; BROADWELL-LABEL: test_fdecstp:
1333; BROADWELL:       # %bb.0:
1334; BROADWELL-NEXT:    #APP
1335; BROADWELL-NEXT:    fdecstp # sched: [2:1.00]
1336; BROADWELL-NEXT:    #NO_APP
1337; BROADWELL-NEXT:    retl # sched: [6:0.50]
1338;
1339; SKYLAKE-LABEL: test_fdecstp:
1340; SKYLAKE:       # %bb.0:
1341; SKYLAKE-NEXT:    #APP
1342; SKYLAKE-NEXT:    fdecstp # sched: [2:1.00]
1343; SKYLAKE-NEXT:    #NO_APP
1344; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1345;
1346; SKX-LABEL: test_fdecstp:
1347; SKX:       # %bb.0:
1348; SKX-NEXT:    #APP
1349; SKX-NEXT:    fdecstp # sched: [2:1.00]
1350; SKX-NEXT:    #NO_APP
1351; SKX-NEXT:    retl # sched: [6:0.50]
1352;
1353; BTVER2-LABEL: test_fdecstp:
1354; BTVER2:       # %bb.0:
1355; BTVER2-NEXT:    #APP
1356; BTVER2-NEXT:    fdecstp # sched: [100:0.50]
1357; BTVER2-NEXT:    #NO_APP
1358; BTVER2-NEXT:    retl # sched: [4:1.00]
1359;
1360; ZNVER1-LABEL: test_fdecstp:
1361; ZNVER1:       # %bb.0:
1362; ZNVER1-NEXT:    #APP
1363; ZNVER1-NEXT:    fdecstp # sched: [11:1.00]
1364; ZNVER1-NEXT:    #NO_APP
1365; ZNVER1-NEXT:    retl # sched: [1:0.50]
1366  tail call void asm sideeffect "fdecstp", ""() nounwind
1367  ret void
1368}
1369
1370define void @test_fdiv(float *%a0, double *%a1) optsize {
1371; GENERIC-LABEL: test_fdiv:
1372; GENERIC:       # %bb.0:
1373; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1374; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1375; GENERIC-NEXT:    #APP
1376; GENERIC-NEXT:    fdiv %st(0), %st(1)
1377; GENERIC-NEXT:    fdiv %st(2)
1378; GENERIC-NEXT:    fdivs (%ecx)
1379; GENERIC-NEXT:    fdivl (%eax)
1380; GENERIC-NEXT:    #NO_APP
1381; GENERIC-NEXT:    retl
1382;
1383; ATOM-LABEL: test_fdiv:
1384; ATOM:       # %bb.0:
1385; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1386; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1387; ATOM-NEXT:    #APP
1388; ATOM-NEXT:    fdiv %st(0), %st(1) # sched: [34:17.00]
1389; ATOM-NEXT:    fdiv %st(2) # sched: [34:17.00]
1390; ATOM-NEXT:    fdivs (%ecx) # sched: [34:17.00]
1391; ATOM-NEXT:    fdivl (%eax) # sched: [34:17.00]
1392; ATOM-NEXT:    #NO_APP
1393; ATOM-NEXT:    retl # sched: [79:39.50]
1394;
1395; SLM-LABEL: test_fdiv:
1396; SLM:       # %bb.0:
1397; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1398; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1399; SLM-NEXT:    #APP
1400; SLM-NEXT:    fdiv %st(0), %st(1) # sched: [19:17.00]
1401; SLM-NEXT:    fdiv %st(2) # sched: [19:17.00]
1402; SLM-NEXT:    fdivs (%ecx) # sched: [22:17.00]
1403; SLM-NEXT:    fdivl (%eax) # sched: [22:17.00]
1404; SLM-NEXT:    #NO_APP
1405; SLM-NEXT:    retl # sched: [4:1.00]
1406;
1407; SANDY-LABEL: test_fdiv:
1408; SANDY:       # %bb.0:
1409; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1410; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1411; SANDY-NEXT:    #APP
1412; SANDY-NEXT:    fdiv %st(0), %st(1) # sched: [14:14.00]
1413; SANDY-NEXT:    fdiv %st(2) # sched: [14:14.00]
1414; SANDY-NEXT:    fdivs (%ecx) # sched: [31:1.00]
1415; SANDY-NEXT:    fdivl (%eax) # sched: [31:1.00]
1416; SANDY-NEXT:    #NO_APP
1417; SANDY-NEXT:    retl # sched: [6:1.00]
1418;
1419; HASWELL-LABEL: test_fdiv:
1420; HASWELL:       # %bb.0:
1421; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1422; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1423; HASWELL-NEXT:    #APP
1424; HASWELL-NEXT:    fdiv %st(0), %st(1) # sched: [24:1.00]
1425; HASWELL-NEXT:    fdiv %st(2) # sched: [20:1.00]
1426; HASWELL-NEXT:    fdivs (%ecx) # sched: [31:1.00]
1427; HASWELL-NEXT:    fdivl (%eax) # sched: [31:1.00]
1428; HASWELL-NEXT:    #NO_APP
1429; HASWELL-NEXT:    retl # sched: [7:1.00]
1430;
1431; BROADWELL-LABEL: test_fdiv:
1432; BROADWELL:       # %bb.0:
1433; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1434; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1435; BROADWELL-NEXT:    #APP
1436; BROADWELL-NEXT:    fdiv %st(0), %st(1) # sched: [15:1.00]
1437; BROADWELL-NEXT:    fdiv %st(2) # sched: [20:1.00]
1438; BROADWELL-NEXT:    fdivs (%ecx) # sched: [21:1.00]
1439; BROADWELL-NEXT:    fdivl (%eax) # sched: [21:1.00]
1440; BROADWELL-NEXT:    #NO_APP
1441; BROADWELL-NEXT:    retl # sched: [6:0.50]
1442;
1443; SKYLAKE-LABEL: test_fdiv:
1444; SKYLAKE:       # %bb.0:
1445; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1446; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1447; SKYLAKE-NEXT:    #APP
1448; SKYLAKE-NEXT:    fdiv %st(0), %st(1) # sched: [15:1.00]
1449; SKYLAKE-NEXT:    fdiv %st(2) # sched: [20:1.00]
1450; SKYLAKE-NEXT:    fdivs (%ecx) # sched: [22:1.00]
1451; SKYLAKE-NEXT:    fdivl (%eax) # sched: [22:1.00]
1452; SKYLAKE-NEXT:    #NO_APP
1453; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1454;
1455; SKX-LABEL: test_fdiv:
1456; SKX:       # %bb.0:
1457; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1458; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1459; SKX-NEXT:    #APP
1460; SKX-NEXT:    fdiv %st(0), %st(1) # sched: [15:1.00]
1461; SKX-NEXT:    fdiv %st(2) # sched: [20:1.00]
1462; SKX-NEXT:    fdivs (%ecx) # sched: [22:1.00]
1463; SKX-NEXT:    fdivl (%eax) # sched: [22:1.00]
1464; SKX-NEXT:    #NO_APP
1465; SKX-NEXT:    retl # sched: [6:0.50]
1466;
1467; BTVER2-LABEL: test_fdiv:
1468; BTVER2:       # %bb.0:
1469; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1470; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1471; BTVER2-NEXT:    #APP
1472; BTVER2-NEXT:    fdiv %st(0), %st(1) # sched: [19:19.00]
1473; BTVER2-NEXT:    fdiv %st(2) # sched: [19:19.00]
1474; BTVER2-NEXT:    fdivs (%ecx) # sched: [24:19.00]
1475; BTVER2-NEXT:    fdivl (%eax) # sched: [24:19.00]
1476; BTVER2-NEXT:    #NO_APP
1477; BTVER2-NEXT:    retl # sched: [4:1.00]
1478;
1479; ZNVER1-LABEL: test_fdiv:
1480; ZNVER1:       # %bb.0:
1481; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1482; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1483; ZNVER1-NEXT:    #APP
1484; ZNVER1-NEXT:    fdiv %st(0), %st(1) # sched: [15:1.00]
1485; ZNVER1-NEXT:    fdiv %st(2) # sched: [15:1.00]
1486; ZNVER1-NEXT:    fdivs (%ecx) # sched: [22:1.00]
1487; ZNVER1-NEXT:    fdivl (%eax) # sched: [22:1.00]
1488; ZNVER1-NEXT:    #NO_APP
1489; ZNVER1-NEXT:    retl # sched: [1:0.50]
1490  tail call void asm sideeffect "fdiv %st(0), %st(1) \0A\09 fdiv %st(2), %st(0) \0A\09 fdivs $0 \0A\09 fdivl $1", "*m,*m"(float *%a0, double *%a1) nounwind
1491  ret void
1492}
1493
1494define void @test_fdivp_fidiv(i16 *%a0, i32 *%a1) optsize {
1495; GENERIC-LABEL: test_fdivp_fidiv:
1496; GENERIC:       # %bb.0:
1497; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1498; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1499; GENERIC-NEXT:    #APP
1500; GENERIC-NEXT:    fdivp %st(1)
1501; GENERIC-NEXT:    fdivp %st(2)
1502; GENERIC-NEXT:    fidivs (%ecx)
1503; GENERIC-NEXT:    fidivl (%eax)
1504; GENERIC-NEXT:    #NO_APP
1505; GENERIC-NEXT:    retl
1506;
1507; ATOM-LABEL: test_fdivp_fidiv:
1508; ATOM:       # %bb.0:
1509; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1510; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1511; ATOM-NEXT:    #APP
1512; ATOM-NEXT:    fdivp %st(1) # sched: [34:17.00]
1513; ATOM-NEXT:    fdivp %st(2) # sched: [34:17.00]
1514; ATOM-NEXT:    fidivs (%ecx) # sched: [34:17.00]
1515; ATOM-NEXT:    fidivl (%eax) # sched: [34:17.00]
1516; ATOM-NEXT:    #NO_APP
1517; ATOM-NEXT:    retl # sched: [79:39.50]
1518;
1519; SLM-LABEL: test_fdivp_fidiv:
1520; SLM:       # %bb.0:
1521; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1522; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1523; SLM-NEXT:    #APP
1524; SLM-NEXT:    fdivp %st(1) # sched: [19:17.00]
1525; SLM-NEXT:    fdivp %st(2) # sched: [19:17.00]
1526; SLM-NEXT:    fidivs (%ecx) # sched: [22:17.00]
1527; SLM-NEXT:    fidivl (%eax) # sched: [22:17.00]
1528; SLM-NEXT:    #NO_APP
1529; SLM-NEXT:    retl # sched: [4:1.00]
1530;
1531; SANDY-LABEL: test_fdivp_fidiv:
1532; SANDY:       # %bb.0:
1533; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1534; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1535; SANDY-NEXT:    #APP
1536; SANDY-NEXT:    fdivp %st(1) # sched: [14:14.00]
1537; SANDY-NEXT:    fdivp %st(2) # sched: [14:14.00]
1538; SANDY-NEXT:    fidivs (%ecx) # sched: [34:1.00]
1539; SANDY-NEXT:    fidivl (%eax) # sched: [34:1.00]
1540; SANDY-NEXT:    #NO_APP
1541; SANDY-NEXT:    retl # sched: [6:1.00]
1542;
1543; HASWELL-LABEL: test_fdivp_fidiv:
1544; HASWELL:       # %bb.0:
1545; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1546; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1547; HASWELL-NEXT:    #APP
1548; HASWELL-NEXT:    fdivp %st(1) # sched: [24:1.00]
1549; HASWELL-NEXT:    fdivp %st(2) # sched: [24:1.00]
1550; HASWELL-NEXT:    fidivs (%ecx) # sched: [34:1.00]
1551; HASWELL-NEXT:    fidivl (%eax) # sched: [34:1.00]
1552; HASWELL-NEXT:    #NO_APP
1553; HASWELL-NEXT:    retl # sched: [7:1.00]
1554;
1555; BROADWELL-LABEL: test_fdivp_fidiv:
1556; BROADWELL:       # %bb.0:
1557; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1558; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1559; BROADWELL-NEXT:    #APP
1560; BROADWELL-NEXT:    fdivp %st(1) # sched: [15:1.00]
1561; BROADWELL-NEXT:    fdivp %st(2) # sched: [15:1.00]
1562; BROADWELL-NEXT:    fidivs (%ecx) # sched: [24:1.00]
1563; BROADWELL-NEXT:    fidivl (%eax) # sched: [24:1.00]
1564; BROADWELL-NEXT:    #NO_APP
1565; BROADWELL-NEXT:    retl # sched: [6:0.50]
1566;
1567; SKYLAKE-LABEL: test_fdivp_fidiv:
1568; SKYLAKE:       # %bb.0:
1569; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1570; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1571; SKYLAKE-NEXT:    #APP
1572; SKYLAKE-NEXT:    fdivp %st(1) # sched: [15:1.00]
1573; SKYLAKE-NEXT:    fdivp %st(2) # sched: [15:1.00]
1574; SKYLAKE-NEXT:    fidivs (%ecx) # sched: [25:1.00]
1575; SKYLAKE-NEXT:    fidivl (%eax) # sched: [25:1.00]
1576; SKYLAKE-NEXT:    #NO_APP
1577; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1578;
1579; SKX-LABEL: test_fdivp_fidiv:
1580; SKX:       # %bb.0:
1581; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1582; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1583; SKX-NEXT:    #APP
1584; SKX-NEXT:    fdivp %st(1) # sched: [15:1.00]
1585; SKX-NEXT:    fdivp %st(2) # sched: [15:1.00]
1586; SKX-NEXT:    fidivs (%ecx) # sched: [25:1.00]
1587; SKX-NEXT:    fidivl (%eax) # sched: [25:1.00]
1588; SKX-NEXT:    #NO_APP
1589; SKX-NEXT:    retl # sched: [6:0.50]
1590;
1591; BTVER2-LABEL: test_fdivp_fidiv:
1592; BTVER2:       # %bb.0:
1593; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1594; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1595; BTVER2-NEXT:    #APP
1596; BTVER2-NEXT:    fdivp %st(1) # sched: [19:19.00]
1597; BTVER2-NEXT:    fdivp %st(2) # sched: [19:19.00]
1598; BTVER2-NEXT:    fidivs (%ecx) # sched: [24:19.00]
1599; BTVER2-NEXT:    fidivl (%eax) # sched: [24:19.00]
1600; BTVER2-NEXT:    #NO_APP
1601; BTVER2-NEXT:    retl # sched: [4:1.00]
1602;
1603; ZNVER1-LABEL: test_fdivp_fidiv:
1604; ZNVER1:       # %bb.0:
1605; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1606; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1607; ZNVER1-NEXT:    #APP
1608; ZNVER1-NEXT:    fdivp %st(1) # sched: [15:1.00]
1609; ZNVER1-NEXT:    fdivp %st(2) # sched: [15:1.00]
1610; ZNVER1-NEXT:    fidivs (%ecx) # sched: [22:1.00]
1611; ZNVER1-NEXT:    fidivl (%eax) # sched: [22:1.00]
1612; ZNVER1-NEXT:    #NO_APP
1613; ZNVER1-NEXT:    retl # sched: [1:0.50]
1614  tail call void asm sideeffect "fdivp \0A\09 fdivp %st(2), %st(0) \0A\09 fidivs $0 \0A\09 fidivl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
1615  ret void
1616}
1617
1618define void @test_fdivr(float *%a0, double *%a1) optsize {
1619; GENERIC-LABEL: test_fdivr:
1620; GENERIC:       # %bb.0:
1621; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1622; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1623; GENERIC-NEXT:    #APP
1624; GENERIC-NEXT:    fdivr %st(0), %st(1)
1625; GENERIC-NEXT:    fdivr %st(2)
1626; GENERIC-NEXT:    fdivrs (%ecx)
1627; GENERIC-NEXT:    fdivrl (%eax)
1628; GENERIC-NEXT:    #NO_APP
1629; GENERIC-NEXT:    retl
1630;
1631; ATOM-LABEL: test_fdivr:
1632; ATOM:       # %bb.0:
1633; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1634; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1635; ATOM-NEXT:    #APP
1636; ATOM-NEXT:    fdivr %st(0), %st(1) # sched: [34:17.00]
1637; ATOM-NEXT:    fdivr %st(2) # sched: [34:17.00]
1638; ATOM-NEXT:    fdivrs (%ecx) # sched: [34:17.00]
1639; ATOM-NEXT:    fdivrl (%eax) # sched: [34:17.00]
1640; ATOM-NEXT:    #NO_APP
1641; ATOM-NEXT:    retl # sched: [79:39.50]
1642;
1643; SLM-LABEL: test_fdivr:
1644; SLM:       # %bb.0:
1645; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1646; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1647; SLM-NEXT:    #APP
1648; SLM-NEXT:    fdivr %st(0), %st(1) # sched: [19:17.00]
1649; SLM-NEXT:    fdivr %st(2) # sched: [19:17.00]
1650; SLM-NEXT:    fdivrs (%ecx) # sched: [22:17.00]
1651; SLM-NEXT:    fdivrl (%eax) # sched: [22:17.00]
1652; SLM-NEXT:    #NO_APP
1653; SLM-NEXT:    retl # sched: [4:1.00]
1654;
1655; SANDY-LABEL: test_fdivr:
1656; SANDY:       # %bb.0:
1657; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1658; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1659; SANDY-NEXT:    #APP
1660; SANDY-NEXT:    fdivr %st(0), %st(1) # sched: [14:14.00]
1661; SANDY-NEXT:    fdivr %st(2) # sched: [14:14.00]
1662; SANDY-NEXT:    fdivrs (%ecx) # sched: [31:1.00]
1663; SANDY-NEXT:    fdivrl (%eax) # sched: [31:1.00]
1664; SANDY-NEXT:    #NO_APP
1665; SANDY-NEXT:    retl # sched: [6:1.00]
1666;
1667; HASWELL-LABEL: test_fdivr:
1668; HASWELL:       # %bb.0:
1669; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1670; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1671; HASWELL-NEXT:    #APP
1672; HASWELL-NEXT:    fdivr %st(0), %st(1) # sched: [20:1.00]
1673; HASWELL-NEXT:    fdivr %st(2) # sched: [24:1.00]
1674; HASWELL-NEXT:    fdivrs (%ecx) # sched: [27:1.00]
1675; HASWELL-NEXT:    fdivrl (%eax) # sched: [27:1.00]
1676; HASWELL-NEXT:    #NO_APP
1677; HASWELL-NEXT:    retl # sched: [7:1.00]
1678;
1679; BROADWELL-LABEL: test_fdivr:
1680; BROADWELL:       # %bb.0:
1681; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1682; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1683; BROADWELL-NEXT:    #APP
1684; BROADWELL-NEXT:    fdivr %st(0), %st(1) # sched: [20:1.00]
1685; BROADWELL-NEXT:    fdivr %st(2) # sched: [15:1.00]
1686; BROADWELL-NEXT:    fdivrs (%ecx) # sched: [26:1.00]
1687; BROADWELL-NEXT:    fdivrl (%eax) # sched: [26:1.00]
1688; BROADWELL-NEXT:    #NO_APP
1689; BROADWELL-NEXT:    retl # sched: [6:0.50]
1690;
1691; SKYLAKE-LABEL: test_fdivr:
1692; SKYLAKE:       # %bb.0:
1693; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1694; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1695; SKYLAKE-NEXT:    #APP
1696; SKYLAKE-NEXT:    fdivr %st(0), %st(1) # sched: [20:1.00]
1697; SKYLAKE-NEXT:    fdivr %st(2) # sched: [15:1.00]
1698; SKYLAKE-NEXT:    fdivrs (%ecx) # sched: [27:1.00]
1699; SKYLAKE-NEXT:    fdivrl (%eax) # sched: [27:1.00]
1700; SKYLAKE-NEXT:    #NO_APP
1701; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1702;
1703; SKX-LABEL: test_fdivr:
1704; SKX:       # %bb.0:
1705; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1706; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1707; SKX-NEXT:    #APP
1708; SKX-NEXT:    fdivr %st(0), %st(1) # sched: [20:1.00]
1709; SKX-NEXT:    fdivr %st(2) # sched: [15:1.00]
1710; SKX-NEXT:    fdivrs (%ecx) # sched: [27:1.00]
1711; SKX-NEXT:    fdivrl (%eax) # sched: [27:1.00]
1712; SKX-NEXT:    #NO_APP
1713; SKX-NEXT:    retl # sched: [6:0.50]
1714;
1715; BTVER2-LABEL: test_fdivr:
1716; BTVER2:       # %bb.0:
1717; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1718; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1719; BTVER2-NEXT:    #APP
1720; BTVER2-NEXT:    fdivr %st(0), %st(1) # sched: [19:19.00]
1721; BTVER2-NEXT:    fdivr %st(2) # sched: [19:19.00]
1722; BTVER2-NEXT:    fdivrs (%ecx) # sched: [24:19.00]
1723; BTVER2-NEXT:    fdivrl (%eax) # sched: [24:19.00]
1724; BTVER2-NEXT:    #NO_APP
1725; BTVER2-NEXT:    retl # sched: [4:1.00]
1726;
1727; ZNVER1-LABEL: test_fdivr:
1728; ZNVER1:       # %bb.0:
1729; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1730; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1731; ZNVER1-NEXT:    #APP
1732; ZNVER1-NEXT:    fdivr %st(0), %st(1) # sched: [15:1.00]
1733; ZNVER1-NEXT:    fdivr %st(2) # sched: [15:1.00]
1734; ZNVER1-NEXT:    fdivrs (%ecx) # sched: [22:1.00]
1735; ZNVER1-NEXT:    fdivrl (%eax) # sched: [22:1.00]
1736; ZNVER1-NEXT:    #NO_APP
1737; ZNVER1-NEXT:    retl # sched: [1:0.50]
1738  tail call void asm sideeffect "fdivr %st(0), %st(1) \0A\09 fdivr %st(2), %st(0) \0A\09 fdivrs $0 \0A\09 fdivrl $1", "*m,*m"(float *%a0, double *%a1) nounwind
1739  ret void
1740}
1741
1742define void @test_fdivrp_fidivr(i16 *%a0, i32 *%a1) optsize {
1743; GENERIC-LABEL: test_fdivrp_fidivr:
1744; GENERIC:       # %bb.0:
1745; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1746; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1747; GENERIC-NEXT:    #APP
1748; GENERIC-NEXT:    fdivrp %st(1)
1749; GENERIC-NEXT:    fdivrp %st(2)
1750; GENERIC-NEXT:    fidivrs (%ecx)
1751; GENERIC-NEXT:    fidivrl (%eax)
1752; GENERIC-NEXT:    #NO_APP
1753; GENERIC-NEXT:    retl
1754;
1755; ATOM-LABEL: test_fdivrp_fidivr:
1756; ATOM:       # %bb.0:
1757; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1758; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1759; ATOM-NEXT:    #APP
1760; ATOM-NEXT:    fdivrp %st(1) # sched: [34:17.00]
1761; ATOM-NEXT:    fdivrp %st(2) # sched: [34:17.00]
1762; ATOM-NEXT:    fidivrs (%ecx) # sched: [34:17.00]
1763; ATOM-NEXT:    fidivrl (%eax) # sched: [34:17.00]
1764; ATOM-NEXT:    #NO_APP
1765; ATOM-NEXT:    retl # sched: [79:39.50]
1766;
1767; SLM-LABEL: test_fdivrp_fidivr:
1768; SLM:       # %bb.0:
1769; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1770; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1771; SLM-NEXT:    #APP
1772; SLM-NEXT:    fdivrp %st(1) # sched: [19:17.00]
1773; SLM-NEXT:    fdivrp %st(2) # sched: [19:17.00]
1774; SLM-NEXT:    fidivrs (%ecx) # sched: [22:17.00]
1775; SLM-NEXT:    fidivrl (%eax) # sched: [22:17.00]
1776; SLM-NEXT:    #NO_APP
1777; SLM-NEXT:    retl # sched: [4:1.00]
1778;
1779; SANDY-LABEL: test_fdivrp_fidivr:
1780; SANDY:       # %bb.0:
1781; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1782; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1783; SANDY-NEXT:    #APP
1784; SANDY-NEXT:    fdivrp %st(1) # sched: [14:14.00]
1785; SANDY-NEXT:    fdivrp %st(2) # sched: [14:14.00]
1786; SANDY-NEXT:    fidivrs (%ecx) # sched: [34:1.00]
1787; SANDY-NEXT:    fidivrl (%eax) # sched: [34:1.00]
1788; SANDY-NEXT:    #NO_APP
1789; SANDY-NEXT:    retl # sched: [6:1.00]
1790;
1791; HASWELL-LABEL: test_fdivrp_fidivr:
1792; HASWELL:       # %bb.0:
1793; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1794; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1795; HASWELL-NEXT:    #APP
1796; HASWELL-NEXT:    fdivrp %st(1) # sched: [20:1.00]
1797; HASWELL-NEXT:    fdivrp %st(2) # sched: [20:1.00]
1798; HASWELL-NEXT:    fidivrs (%ecx) # sched: [30:1.00]
1799; HASWELL-NEXT:    fidivrl (%eax) # sched: [30:1.00]
1800; HASWELL-NEXT:    #NO_APP
1801; HASWELL-NEXT:    retl # sched: [7:1.00]
1802;
1803; BROADWELL-LABEL: test_fdivrp_fidivr:
1804; BROADWELL:       # %bb.0:
1805; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1806; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1807; BROADWELL-NEXT:    #APP
1808; BROADWELL-NEXT:    fdivrp %st(1) # sched: [20:1.00]
1809; BROADWELL-NEXT:    fdivrp %st(2) # sched: [20:1.00]
1810; BROADWELL-NEXT:    fidivrs (%ecx) # sched: [29:1.00]
1811; BROADWELL-NEXT:    fidivrl (%eax) # sched: [29:1.00]
1812; BROADWELL-NEXT:    #NO_APP
1813; BROADWELL-NEXT:    retl # sched: [6:0.50]
1814;
1815; SKYLAKE-LABEL: test_fdivrp_fidivr:
1816; SKYLAKE:       # %bb.0:
1817; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1818; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1819; SKYLAKE-NEXT:    #APP
1820; SKYLAKE-NEXT:    fdivrp %st(1) # sched: [20:1.00]
1821; SKYLAKE-NEXT:    fdivrp %st(2) # sched: [20:1.00]
1822; SKYLAKE-NEXT:    fidivrs (%ecx) # sched: [30:1.00]
1823; SKYLAKE-NEXT:    fidivrl (%eax) # sched: [30:1.00]
1824; SKYLAKE-NEXT:    #NO_APP
1825; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1826;
1827; SKX-LABEL: test_fdivrp_fidivr:
1828; SKX:       # %bb.0:
1829; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1830; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1831; SKX-NEXT:    #APP
1832; SKX-NEXT:    fdivrp %st(1) # sched: [20:1.00]
1833; SKX-NEXT:    fdivrp %st(2) # sched: [20:1.00]
1834; SKX-NEXT:    fidivrs (%ecx) # sched: [30:1.00]
1835; SKX-NEXT:    fidivrl (%eax) # sched: [30:1.00]
1836; SKX-NEXT:    #NO_APP
1837; SKX-NEXT:    retl # sched: [6:0.50]
1838;
1839; BTVER2-LABEL: test_fdivrp_fidivr:
1840; BTVER2:       # %bb.0:
1841; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
1842; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
1843; BTVER2-NEXT:    #APP
1844; BTVER2-NEXT:    fdivrp %st(1) # sched: [19:19.00]
1845; BTVER2-NEXT:    fdivrp %st(2) # sched: [19:19.00]
1846; BTVER2-NEXT:    fidivrs (%ecx) # sched: [24:19.00]
1847; BTVER2-NEXT:    fidivrl (%eax) # sched: [24:19.00]
1848; BTVER2-NEXT:    #NO_APP
1849; BTVER2-NEXT:    retl # sched: [4:1.00]
1850;
1851; ZNVER1-LABEL: test_fdivrp_fidivr:
1852; ZNVER1:       # %bb.0:
1853; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
1854; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
1855; ZNVER1-NEXT:    #APP
1856; ZNVER1-NEXT:    fdivrp %st(1) # sched: [15:1.00]
1857; ZNVER1-NEXT:    fdivrp %st(2) # sched: [15:1.00]
1858; ZNVER1-NEXT:    fidivrs (%ecx) # sched: [22:1.00]
1859; ZNVER1-NEXT:    fidivrl (%eax) # sched: [22:1.00]
1860; ZNVER1-NEXT:    #NO_APP
1861; ZNVER1-NEXT:    retl # sched: [1:0.50]
1862  tail call void asm sideeffect "fdivrp \0A\09 fdivrp %st(2), %st(0) \0A\09 fidivrs $0 \0A\09 fidivrl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
1863  ret void
1864}
1865
1866define void @test_ffree() optsize {
1867; GENERIC-LABEL: test_ffree:
1868; GENERIC:       # %bb.0:
1869; GENERIC-NEXT:    #APP
1870; GENERIC-NEXT:    ffree %st(0)
1871; GENERIC-NEXT:    #NO_APP
1872; GENERIC-NEXT:    retl
1873;
1874; ATOM-LABEL: test_ffree:
1875; ATOM:       # %bb.0:
1876; ATOM-NEXT:    #APP
1877; ATOM-NEXT:    ffree %st(0) # sched: [1:0.50]
1878; ATOM-NEXT:    #NO_APP
1879; ATOM-NEXT:    retl # sched: [79:39.50]
1880;
1881; SLM-LABEL: test_ffree:
1882; SLM:       # %bb.0:
1883; SLM-NEXT:    #APP
1884; SLM-NEXT:    ffree %st(0) # sched: [100:1.00]
1885; SLM-NEXT:    #NO_APP
1886; SLM-NEXT:    retl # sched: [4:1.00]
1887;
1888; SANDY-LABEL: test_ffree:
1889; SANDY:       # %bb.0:
1890; SANDY-NEXT:    #APP
1891; SANDY-NEXT:    ffree %st(0) # sched: [1:1.00]
1892; SANDY-NEXT:    #NO_APP
1893; SANDY-NEXT:    retl # sched: [6:1.00]
1894;
1895; HASWELL-LABEL: test_ffree:
1896; HASWELL:       # %bb.0:
1897; HASWELL-NEXT:    #APP
1898; HASWELL-NEXT:    ffree %st(0) # sched: [1:0.50]
1899; HASWELL-NEXT:    #NO_APP
1900; HASWELL-NEXT:    retl # sched: [7:1.00]
1901;
1902; BROADWELL-LABEL: test_ffree:
1903; BROADWELL:       # %bb.0:
1904; BROADWELL-NEXT:    #APP
1905; BROADWELL-NEXT:    ffree %st(0) # sched: [100:0.25]
1906; BROADWELL-NEXT:    #NO_APP
1907; BROADWELL-NEXT:    retl # sched: [6:0.50]
1908;
1909; SKYLAKE-LABEL: test_ffree:
1910; SKYLAKE:       # %bb.0:
1911; SKYLAKE-NEXT:    #APP
1912; SKYLAKE-NEXT:    ffree %st(0) # sched: [100:0.25]
1913; SKYLAKE-NEXT:    #NO_APP
1914; SKYLAKE-NEXT:    retl # sched: [6:0.50]
1915;
1916; SKX-LABEL: test_ffree:
1917; SKX:       # %bb.0:
1918; SKX-NEXT:    #APP
1919; SKX-NEXT:    ffree %st(0) # sched: [100:0.25]
1920; SKX-NEXT:    #NO_APP
1921; SKX-NEXT:    retl # sched: [6:0.50]
1922;
1923; BTVER2-LABEL: test_ffree:
1924; BTVER2:       # %bb.0:
1925; BTVER2-NEXT:    #APP
1926; BTVER2-NEXT:    ffree %st(0) # sched: [100:0.50]
1927; BTVER2-NEXT:    #NO_APP
1928; BTVER2-NEXT:    retl # sched: [4:1.00]
1929;
1930; ZNVER1-LABEL: test_ffree:
1931; ZNVER1:       # %bb.0:
1932; ZNVER1-NEXT:    #APP
1933; ZNVER1-NEXT:    ffree %st(0) # sched: [11:1.00]
1934; ZNVER1-NEXT:    #NO_APP
1935; ZNVER1-NEXT:    retl # sched: [1:0.50]
1936  tail call void asm sideeffect "ffree %st(0)", ""() nounwind
1937  ret void
1938}
1939
1940define void @test_ficom(i16 *%a0, i32 *%a1) optsize {
1941; GENERIC-LABEL: test_ficom:
1942; GENERIC:       # %bb.0:
1943; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
1944; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1945; GENERIC-NEXT:    #APP
1946; GENERIC-NEXT:    ficoms (%ecx)
1947; GENERIC-NEXT:    ficoml (%eax)
1948; GENERIC-NEXT:    ficomps (%ecx)
1949; GENERIC-NEXT:    ficompl (%eax)
1950; GENERIC-NEXT:    #NO_APP
1951; GENERIC-NEXT:    retl
1952;
1953; ATOM-LABEL: test_ficom:
1954; ATOM:       # %bb.0:
1955; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
1956; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
1957; ATOM-NEXT:    #APP
1958; ATOM-NEXT:    ficoms (%ecx) # sched: [5:5.00]
1959; ATOM-NEXT:    ficoml (%eax) # sched: [5:5.00]
1960; ATOM-NEXT:    ficomps (%ecx) # sched: [5:5.00]
1961; ATOM-NEXT:    ficompl (%eax) # sched: [5:5.00]
1962; ATOM-NEXT:    #NO_APP
1963; ATOM-NEXT:    retl # sched: [79:39.50]
1964;
1965; SLM-LABEL: test_ficom:
1966; SLM:       # %bb.0:
1967; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
1968; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
1969; SLM-NEXT:    #APP
1970; SLM-NEXT:    ficoms (%ecx) # sched: [6:1.00]
1971; SLM-NEXT:    ficoml (%eax) # sched: [6:1.00]
1972; SLM-NEXT:    ficomps (%ecx) # sched: [6:1.00]
1973; SLM-NEXT:    ficompl (%eax) # sched: [6:1.00]
1974; SLM-NEXT:    #NO_APP
1975; SLM-NEXT:    retl # sched: [4:1.00]
1976;
1977; SANDY-LABEL: test_ficom:
1978; SANDY:       # %bb.0:
1979; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1980; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1981; SANDY-NEXT:    #APP
1982; SANDY-NEXT:    ficoms (%ecx) # sched: [11:2.00]
1983; SANDY-NEXT:    ficoml (%eax) # sched: [11:2.00]
1984; SANDY-NEXT:    ficomps (%ecx) # sched: [11:2.00]
1985; SANDY-NEXT:    ficompl (%eax) # sched: [11:2.00]
1986; SANDY-NEXT:    #NO_APP
1987; SANDY-NEXT:    retl # sched: [6:1.00]
1988;
1989; HASWELL-LABEL: test_ficom:
1990; HASWELL:       # %bb.0:
1991; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
1992; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
1993; HASWELL-NEXT:    #APP
1994; HASWELL-NEXT:    ficoms (%ecx) # sched: [11:2.00]
1995; HASWELL-NEXT:    ficoml (%eax) # sched: [11:2.00]
1996; HASWELL-NEXT:    ficomps (%ecx) # sched: [11:2.00]
1997; HASWELL-NEXT:    ficompl (%eax) # sched: [11:2.00]
1998; HASWELL-NEXT:    #NO_APP
1999; HASWELL-NEXT:    retl # sched: [7:1.00]
2000;
2001; BROADWELL-LABEL: test_ficom:
2002; BROADWELL:       # %bb.0:
2003; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2004; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2005; BROADWELL-NEXT:    #APP
2006; BROADWELL-NEXT:    ficoms (%ecx) # sched: [10:2.00]
2007; BROADWELL-NEXT:    ficoml (%eax) # sched: [10:2.00]
2008; BROADWELL-NEXT:    ficomps (%ecx) # sched: [10:2.00]
2009; BROADWELL-NEXT:    ficompl (%eax) # sched: [10:2.00]
2010; BROADWELL-NEXT:    #NO_APP
2011; BROADWELL-NEXT:    retl # sched: [6:0.50]
2012;
2013; SKYLAKE-LABEL: test_ficom:
2014; SKYLAKE:       # %bb.0:
2015; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2016; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2017; SKYLAKE-NEXT:    #APP
2018; SKYLAKE-NEXT:    ficoms (%ecx) # sched: [11:2.00]
2019; SKYLAKE-NEXT:    ficoml (%eax) # sched: [11:2.00]
2020; SKYLAKE-NEXT:    ficomps (%ecx) # sched: [11:2.00]
2021; SKYLAKE-NEXT:    ficompl (%eax) # sched: [11:2.00]
2022; SKYLAKE-NEXT:    #NO_APP
2023; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2024;
2025; SKX-LABEL: test_ficom:
2026; SKX:       # %bb.0:
2027; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2028; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2029; SKX-NEXT:    #APP
2030; SKX-NEXT:    ficoms (%ecx) # sched: [11:2.00]
2031; SKX-NEXT:    ficoml (%eax) # sched: [11:2.00]
2032; SKX-NEXT:    ficomps (%ecx) # sched: [11:2.00]
2033; SKX-NEXT:    ficompl (%eax) # sched: [11:2.00]
2034; SKX-NEXT:    #NO_APP
2035; SKX-NEXT:    retl # sched: [6:0.50]
2036;
2037; BTVER2-LABEL: test_ficom:
2038; BTVER2:       # %bb.0:
2039; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
2040; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
2041; BTVER2-NEXT:    #APP
2042; BTVER2-NEXT:    ficoms (%ecx) # sched: [8:1.00]
2043; BTVER2-NEXT:    ficoml (%eax) # sched: [8:1.00]
2044; BTVER2-NEXT:    ficomps (%ecx) # sched: [8:1.00]
2045; BTVER2-NEXT:    ficompl (%eax) # sched: [8:1.00]
2046; BTVER2-NEXT:    #NO_APP
2047; BTVER2-NEXT:    retl # sched: [4:1.00]
2048;
2049; ZNVER1-LABEL: test_ficom:
2050; ZNVER1:       # %bb.0:
2051; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
2052; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
2053; ZNVER1-NEXT:    #APP
2054; ZNVER1-NEXT:    ficoms (%ecx) # sched: [12:1.50]
2055; ZNVER1-NEXT:    ficoml (%eax) # sched: [12:1.50]
2056; ZNVER1-NEXT:    ficomps (%ecx) # sched: [12:1.50]
2057; ZNVER1-NEXT:    ficompl (%eax) # sched: [12:1.50]
2058; ZNVER1-NEXT:    #NO_APP
2059; ZNVER1-NEXT:    retl # sched: [1:0.50]
2060  tail call void asm sideeffect "ficoms $0 \0A\09 ficoml $1 \0A\09 ficomps $0 \0A\09 ficompl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
2061  ret void
2062}
2063
2064define void @test_fild(i16 *%a0, i32 *%a1, i64 *%a2) optsize {
2065; GENERIC-LABEL: test_fild:
2066; GENERIC:       # %bb.0:
2067; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2068; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2069; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %edx
2070; GENERIC-NEXT:    #APP
2071; GENERIC-NEXT:    filds (%edx)
2072; GENERIC-NEXT:    fildl (%ecx)
2073; GENERIC-NEXT:    fildll (%eax)
2074; GENERIC-NEXT:    #NO_APP
2075; GENERIC-NEXT:    retl
2076;
2077; ATOM-LABEL: test_fild:
2078; ATOM:       # %bb.0:
2079; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
2080; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
2081; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00]
2082; ATOM-NEXT:    #APP
2083; ATOM-NEXT:    filds (%edx) # sched: [5:5.00]
2084; ATOM-NEXT:    fildl (%ecx) # sched: [5:5.00]
2085; ATOM-NEXT:    fildll (%eax) # sched: [5:5.00]
2086; ATOM-NEXT:    #NO_APP
2087; ATOM-NEXT:    retl # sched: [79:39.50]
2088;
2089; SLM-LABEL: test_fild:
2090; SLM:       # %bb.0:
2091; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
2092; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
2093; SLM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00]
2094; SLM-NEXT:    #APP
2095; SLM-NEXT:    filds (%edx) # sched: [3:1.00]
2096; SLM-NEXT:    fildl (%ecx) # sched: [3:1.00]
2097; SLM-NEXT:    fildll (%eax) # sched: [3:1.00]
2098; SLM-NEXT:    #NO_APP
2099; SLM-NEXT:    retl # sched: [4:1.00]
2100;
2101; SANDY-LABEL: test_fild:
2102; SANDY:       # %bb.0:
2103; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2104; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2105; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2106; SANDY-NEXT:    #APP
2107; SANDY-NEXT:    filds (%edx) # sched: [10:1.00]
2108; SANDY-NEXT:    fildl (%ecx) # sched: [10:1.00]
2109; SANDY-NEXT:    fildll (%eax) # sched: [10:1.00]
2110; SANDY-NEXT:    #NO_APP
2111; SANDY-NEXT:    retl # sched: [6:1.00]
2112;
2113; HASWELL-LABEL: test_fild:
2114; HASWELL:       # %bb.0:
2115; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2116; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2117; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2118; HASWELL-NEXT:    #APP
2119; HASWELL-NEXT:    filds (%edx) # sched: [10:1.00]
2120; HASWELL-NEXT:    fildl (%ecx) # sched: [10:1.00]
2121; HASWELL-NEXT:    fildll (%eax) # sched: [10:1.00]
2122; HASWELL-NEXT:    #NO_APP
2123; HASWELL-NEXT:    retl # sched: [7:1.00]
2124;
2125; BROADWELL-LABEL: test_fild:
2126; BROADWELL:       # %bb.0:
2127; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2128; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2129; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2130; BROADWELL-NEXT:    #APP
2131; BROADWELL-NEXT:    filds (%edx) # sched: [9:1.00]
2132; BROADWELL-NEXT:    fildl (%ecx) # sched: [9:1.00]
2133; BROADWELL-NEXT:    fildll (%eax) # sched: [9:1.00]
2134; BROADWELL-NEXT:    #NO_APP
2135; BROADWELL-NEXT:    retl # sched: [6:0.50]
2136;
2137; SKYLAKE-LABEL: test_fild:
2138; SKYLAKE:       # %bb.0:
2139; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2140; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2141; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2142; SKYLAKE-NEXT:    #APP
2143; SKYLAKE-NEXT:    filds (%edx) # sched: [10:1.00]
2144; SKYLAKE-NEXT:    fildl (%ecx) # sched: [10:1.00]
2145; SKYLAKE-NEXT:    fildll (%eax) # sched: [10:1.00]
2146; SKYLAKE-NEXT:    #NO_APP
2147; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2148;
2149; SKX-LABEL: test_fild:
2150; SKX:       # %bb.0:
2151; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2152; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2153; SKX-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2154; SKX-NEXT:    #APP
2155; SKX-NEXT:    filds (%edx) # sched: [10:1.00]
2156; SKX-NEXT:    fildl (%ecx) # sched: [10:1.00]
2157; SKX-NEXT:    fildll (%eax) # sched: [10:1.00]
2158; SKX-NEXT:    #NO_APP
2159; SKX-NEXT:    retl # sched: [6:0.50]
2160;
2161; BTVER2-LABEL: test_fild:
2162; BTVER2:       # %bb.0:
2163; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
2164; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
2165; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00]
2166; BTVER2-NEXT:    #APP
2167; BTVER2-NEXT:    filds (%edx) # sched: [5:1.00]
2168; BTVER2-NEXT:    fildl (%ecx) # sched: [5:1.00]
2169; BTVER2-NEXT:    fildll (%eax) # sched: [5:1.00]
2170; BTVER2-NEXT:    #NO_APP
2171; BTVER2-NEXT:    retl # sched: [4:1.00]
2172;
2173; ZNVER1-LABEL: test_fild:
2174; ZNVER1:       # %bb.0:
2175; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
2176; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
2177; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50]
2178; ZNVER1-NEXT:    #APP
2179; ZNVER1-NEXT:    filds (%edx) # sched: [11:1.00]
2180; ZNVER1-NEXT:    fildl (%ecx) # sched: [11:1.00]
2181; ZNVER1-NEXT:    fildll (%eax) # sched: [11:1.00]
2182; ZNVER1-NEXT:    #NO_APP
2183; ZNVER1-NEXT:    retl # sched: [1:0.50]
2184  tail call void asm sideeffect "filds $0 \0A\09 fildl $1 \0A\09 fildll $2", "*m,*m,*m"(i16 *%a0, i32 *%a1, i64 *%a2) nounwind
2185  ret void
2186}
2187
2188define void @test_fincstp() optsize {
2189; GENERIC-LABEL: test_fincstp:
2190; GENERIC:       # %bb.0:
2191; GENERIC-NEXT:    #APP
2192; GENERIC-NEXT:    fincstp
2193; GENERIC-NEXT:    #NO_APP
2194; GENERIC-NEXT:    retl
2195;
2196; ATOM-LABEL: test_fincstp:
2197; ATOM:       # %bb.0:
2198; ATOM-NEXT:    #APP
2199; ATOM-NEXT:    fincstp # sched: [1:0.50]
2200; ATOM-NEXT:    #NO_APP
2201; ATOM-NEXT:    retl # sched: [79:39.50]
2202;
2203; SLM-LABEL: test_fincstp:
2204; SLM:       # %bb.0:
2205; SLM-NEXT:    #APP
2206; SLM-NEXT:    fincstp # sched: [100:1.00]
2207; SLM-NEXT:    #NO_APP
2208; SLM-NEXT:    retl # sched: [4:1.00]
2209;
2210; SANDY-LABEL: test_fincstp:
2211; SANDY:       # %bb.0:
2212; SANDY-NEXT:    #APP
2213; SANDY-NEXT:    fincstp # sched: [1:1.00]
2214; SANDY-NEXT:    #NO_APP
2215; SANDY-NEXT:    retl # sched: [6:1.00]
2216;
2217; HASWELL-LABEL: test_fincstp:
2218; HASWELL:       # %bb.0:
2219; HASWELL-NEXT:    #APP
2220; HASWELL-NEXT:    fincstp # sched: [1:0.50]
2221; HASWELL-NEXT:    #NO_APP
2222; HASWELL-NEXT:    retl # sched: [7:1.00]
2223;
2224; BROADWELL-LABEL: test_fincstp:
2225; BROADWELL:       # %bb.0:
2226; BROADWELL-NEXT:    #APP
2227; BROADWELL-NEXT:    fincstp # sched: [1:0.50]
2228; BROADWELL-NEXT:    #NO_APP
2229; BROADWELL-NEXT:    retl # sched: [6:0.50]
2230;
2231; SKYLAKE-LABEL: test_fincstp:
2232; SKYLAKE:       # %bb.0:
2233; SKYLAKE-NEXT:    #APP
2234; SKYLAKE-NEXT:    fincstp # sched: [1:0.50]
2235; SKYLAKE-NEXT:    #NO_APP
2236; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2237;
2238; SKX-LABEL: test_fincstp:
2239; SKX:       # %bb.0:
2240; SKX-NEXT:    #APP
2241; SKX-NEXT:    fincstp # sched: [1:0.50]
2242; SKX-NEXT:    #NO_APP
2243; SKX-NEXT:    retl # sched: [6:0.50]
2244;
2245; BTVER2-LABEL: test_fincstp:
2246; BTVER2:       # %bb.0:
2247; BTVER2-NEXT:    #APP
2248; BTVER2-NEXT:    fincstp # sched: [100:0.50]
2249; BTVER2-NEXT:    #NO_APP
2250; BTVER2-NEXT:    retl # sched: [4:1.00]
2251;
2252; ZNVER1-LABEL: test_fincstp:
2253; ZNVER1:       # %bb.0:
2254; ZNVER1-NEXT:    #APP
2255; ZNVER1-NEXT:    fincstp # sched: [11:1.00]
2256; ZNVER1-NEXT:    #NO_APP
2257; ZNVER1-NEXT:    retl # sched: [1:0.50]
2258  tail call void asm sideeffect "fincstp", ""() nounwind
2259  ret void
2260}
2261
2262define void @test_finit() optsize {
2263; GENERIC-LABEL: test_finit:
2264; GENERIC:       # %bb.0:
2265; GENERIC-NEXT:    #APP
2266; GENERIC-NEXT:    wait
2267; GENERIC-NEXT:    fninit
2268; GENERIC-NEXT:    #NO_APP
2269; GENERIC-NEXT:    retl
2270;
2271; ATOM-LABEL: test_finit:
2272; ATOM:       # %bb.0:
2273; ATOM-NEXT:    #APP
2274; ATOM-NEXT:    wait # sched: [1:0.50]
2275; ATOM-NEXT:    fninit # sched: [63:31.50]
2276; ATOM-NEXT:    #NO_APP
2277; ATOM-NEXT:    retl # sched: [79:39.50]
2278;
2279; SLM-LABEL: test_finit:
2280; SLM:       # %bb.0:
2281; SLM-NEXT:    #APP
2282; SLM-NEXT:    wait # sched: [100:1.00]
2283; SLM-NEXT:    fninit # sched: [100:1.00]
2284; SLM-NEXT:    #NO_APP
2285; SLM-NEXT:    retl # sched: [4:1.00]
2286;
2287; SANDY-LABEL: test_finit:
2288; SANDY:       # %bb.0:
2289; SANDY-NEXT:    #APP
2290; SANDY-NEXT:    wait # sched: [100:0.33]
2291; SANDY-NEXT:    fninit # sched: [5:1.33]
2292; SANDY-NEXT:    #NO_APP
2293; SANDY-NEXT:    retl # sched: [6:1.00]
2294;
2295; HASWELL-LABEL: test_finit:
2296; HASWELL:       # %bb.0:
2297; HASWELL-NEXT:    #APP
2298; HASWELL-NEXT:    wait # sched: [2:0.50]
2299; HASWELL-NEXT:    fninit # sched: [75:6.00]
2300; HASWELL-NEXT:    #NO_APP
2301; HASWELL-NEXT:    retl # sched: [7:1.00]
2302;
2303; BROADWELL-LABEL: test_finit:
2304; BROADWELL:       # %bb.0:
2305; BROADWELL-NEXT:    #APP
2306; BROADWELL-NEXT:    wait # sched: [2:0.50]
2307; BROADWELL-NEXT:    fninit # sched: [75:6.00]
2308; BROADWELL-NEXT:    #NO_APP
2309; BROADWELL-NEXT:    retl # sched: [6:0.50]
2310;
2311; SKYLAKE-LABEL: test_finit:
2312; SKYLAKE:       # %bb.0:
2313; SKYLAKE-NEXT:    #APP
2314; SKYLAKE-NEXT:    wait # sched: [2:0.50]
2315; SKYLAKE-NEXT:    fninit # sched: [75:6.00]
2316; SKYLAKE-NEXT:    #NO_APP
2317; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2318;
2319; SKX-LABEL: test_finit:
2320; SKX:       # %bb.0:
2321; SKX-NEXT:    #APP
2322; SKX-NEXT:    wait # sched: [2:0.50]
2323; SKX-NEXT:    fninit # sched: [75:6.00]
2324; SKX-NEXT:    #NO_APP
2325; SKX-NEXT:    retl # sched: [6:0.50]
2326;
2327; BTVER2-LABEL: test_finit:
2328; BTVER2:       # %bb.0:
2329; BTVER2-NEXT:    #APP
2330; BTVER2-NEXT:    wait # sched: [100:0.50]
2331; BTVER2-NEXT:    fninit # sched: [100:0.50]
2332; BTVER2-NEXT:    #NO_APP
2333; BTVER2-NEXT:    retl # sched: [4:1.00]
2334;
2335; ZNVER1-LABEL: test_finit:
2336; ZNVER1:       # %bb.0:
2337; ZNVER1-NEXT:    #APP
2338; ZNVER1-NEXT:    wait # sched: [1:1.00]
2339; ZNVER1-NEXT:    fninit # sched: [100:0.25]
2340; ZNVER1-NEXT:    #NO_APP
2341; ZNVER1-NEXT:    retl # sched: [1:0.50]
2342  tail call void asm sideeffect "finit", ""() nounwind
2343  ret void
2344}
2345
2346define void @test_fninit() optsize {
2347; GENERIC-LABEL: test_fninit:
2348; GENERIC:       # %bb.0:
2349; GENERIC-NEXT:    #APP
2350; GENERIC-NEXT:    fninit
2351; GENERIC-NEXT:    #NO_APP
2352; GENERIC-NEXT:    retl
2353;
2354; ATOM-LABEL: test_fninit:
2355; ATOM:       # %bb.0:
2356; ATOM-NEXT:    #APP
2357; ATOM-NEXT:    fninit # sched: [63:31.50]
2358; ATOM-NEXT:    #NO_APP
2359; ATOM-NEXT:    retl # sched: [79:39.50]
2360;
2361; SLM-LABEL: test_fninit:
2362; SLM:       # %bb.0:
2363; SLM-NEXT:    #APP
2364; SLM-NEXT:    fninit # sched: [100:1.00]
2365; SLM-NEXT:    #NO_APP
2366; SLM-NEXT:    retl # sched: [4:1.00]
2367;
2368; SANDY-LABEL: test_fninit:
2369; SANDY:       # %bb.0:
2370; SANDY-NEXT:    #APP
2371; SANDY-NEXT:    fninit # sched: [5:1.33]
2372; SANDY-NEXT:    #NO_APP
2373; SANDY-NEXT:    retl # sched: [6:1.00]
2374;
2375; HASWELL-LABEL: test_fninit:
2376; HASWELL:       # %bb.0:
2377; HASWELL-NEXT:    #APP
2378; HASWELL-NEXT:    fninit # sched: [75:6.00]
2379; HASWELL-NEXT:    #NO_APP
2380; HASWELL-NEXT:    retl # sched: [7:1.00]
2381;
2382; BROADWELL-LABEL: test_fninit:
2383; BROADWELL:       # %bb.0:
2384; BROADWELL-NEXT:    #APP
2385; BROADWELL-NEXT:    fninit # sched: [75:6.00]
2386; BROADWELL-NEXT:    #NO_APP
2387; BROADWELL-NEXT:    retl # sched: [6:0.50]
2388;
2389; SKYLAKE-LABEL: test_fninit:
2390; SKYLAKE:       # %bb.0:
2391; SKYLAKE-NEXT:    #APP
2392; SKYLAKE-NEXT:    fninit # sched: [75:6.00]
2393; SKYLAKE-NEXT:    #NO_APP
2394; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2395;
2396; SKX-LABEL: test_fninit:
2397; SKX:       # %bb.0:
2398; SKX-NEXT:    #APP
2399; SKX-NEXT:    fninit # sched: [75:6.00]
2400; SKX-NEXT:    #NO_APP
2401; SKX-NEXT:    retl # sched: [6:0.50]
2402;
2403; BTVER2-LABEL: test_fninit:
2404; BTVER2:       # %bb.0:
2405; BTVER2-NEXT:    #APP
2406; BTVER2-NEXT:    fninit # sched: [100:0.50]
2407; BTVER2-NEXT:    #NO_APP
2408; BTVER2-NEXT:    retl # sched: [4:1.00]
2409;
2410; ZNVER1-LABEL: test_fninit:
2411; ZNVER1:       # %bb.0:
2412; ZNVER1-NEXT:    #APP
2413; ZNVER1-NEXT:    fninit # sched: [100:0.25]
2414; ZNVER1-NEXT:    #NO_APP
2415; ZNVER1-NEXT:    retl # sched: [1:0.50]
2416  tail call void asm sideeffect "fninit", ""() nounwind
2417  ret void
2418}
2419
2420define void @test_fist_fistp_fisttp(i16* %a0, i32* %a1, i64 *%a2) optsize {
2421; GENERIC-LABEL: test_fist_fistp_fisttp:
2422; GENERIC:       # %bb.0:
2423; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2424; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2425; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %edx
2426; GENERIC-NEXT:    #APP
2427; GENERIC-NEXT:    fists (%edx)
2428; GENERIC-NEXT:    fistl (%ecx)
2429; GENERIC-NEXT:    fistps (%edx)
2430; GENERIC-NEXT:    fistpl (%ecx)
2431; GENERIC-NEXT:    fistpll (%eax)
2432; GENERIC-NEXT:    fisttps (%edx)
2433; GENERIC-NEXT:    fisttpl (%ecx)
2434; GENERIC-NEXT:    fisttpll (%eax)
2435; GENERIC-NEXT:    #NO_APP
2436; GENERIC-NEXT:    retl
2437;
2438; ATOM-LABEL: test_fist_fistp_fisttp:
2439; ATOM:       # %bb.0:
2440; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
2441; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
2442; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00]
2443; ATOM-NEXT:    #APP
2444; ATOM-NEXT:    fists (%edx) # sched: [6:3.00]
2445; ATOM-NEXT:    fistl (%ecx) # sched: [6:3.00]
2446; ATOM-NEXT:    fistps (%edx) # sched: [6:3.00]
2447; ATOM-NEXT:    fistpl (%ecx) # sched: [6:3.00]
2448; ATOM-NEXT:    fistpll (%eax) # sched: [6:3.00]
2449; ATOM-NEXT:    fisttps (%edx) # sched: [2:1.00]
2450; ATOM-NEXT:    fisttpl (%ecx) # sched: [2:1.00]
2451; ATOM-NEXT:    fisttpll (%eax) # sched: [2:1.00]
2452; ATOM-NEXT:    #NO_APP
2453; ATOM-NEXT:    retl # sched: [79:39.50]
2454;
2455; SLM-LABEL: test_fist_fistp_fisttp:
2456; SLM:       # %bb.0:
2457; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
2458; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
2459; SLM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00]
2460; SLM-NEXT:    #APP
2461; SLM-NEXT:    fists (%edx) # sched: [1:1.00]
2462; SLM-NEXT:    fistl (%ecx) # sched: [1:1.00]
2463; SLM-NEXT:    fistps (%edx) # sched: [1:1.00]
2464; SLM-NEXT:    fistpl (%ecx) # sched: [1:1.00]
2465; SLM-NEXT:    fistpll (%eax) # sched: [1:1.00]
2466; SLM-NEXT:    fisttps (%edx) # sched: [1:1.00]
2467; SLM-NEXT:    fisttpl (%ecx) # sched: [1:1.00]
2468; SLM-NEXT:    fisttpll (%eax) # sched: [1:1.00]
2469; SLM-NEXT:    #NO_APP
2470; SLM-NEXT:    retl # sched: [4:1.00]
2471;
2472; SANDY-LABEL: test_fist_fistp_fisttp:
2473; SANDY:       # %bb.0:
2474; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2475; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2476; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2477; SANDY-NEXT:    #APP
2478; SANDY-NEXT:    fists (%edx) # sched: [9:1.00]
2479; SANDY-NEXT:    fistl (%ecx) # sched: [9:1.00]
2480; SANDY-NEXT:    fistps (%edx) # sched: [9:1.00]
2481; SANDY-NEXT:    fistpl (%ecx) # sched: [9:1.00]
2482; SANDY-NEXT:    fistpll (%eax) # sched: [9:1.00]
2483; SANDY-NEXT:    fisttps (%edx) # sched: [5:1.00]
2484; SANDY-NEXT:    fisttpl (%ecx) # sched: [5:1.00]
2485; SANDY-NEXT:    fisttpll (%eax) # sched: [5:1.00]
2486; SANDY-NEXT:    #NO_APP
2487; SANDY-NEXT:    retl # sched: [6:1.00]
2488;
2489; HASWELL-LABEL: test_fist_fistp_fisttp:
2490; HASWELL:       # %bb.0:
2491; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2492; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2493; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2494; HASWELL-NEXT:    #APP
2495; HASWELL-NEXT:    fists (%edx) # sched: [4:1.00]
2496; HASWELL-NEXT:    fistl (%ecx) # sched: [4:1.00]
2497; HASWELL-NEXT:    fistps (%edx) # sched: [4:1.00]
2498; HASWELL-NEXT:    fistpl (%ecx) # sched: [4:1.00]
2499; HASWELL-NEXT:    fistpll (%eax) # sched: [4:1.00]
2500; HASWELL-NEXT:    fisttps (%edx) # sched: [4:1.00]
2501; HASWELL-NEXT:    fisttpl (%ecx) # sched: [4:1.00]
2502; HASWELL-NEXT:    fisttpll (%eax) # sched: [4:1.00]
2503; HASWELL-NEXT:    #NO_APP
2504; HASWELL-NEXT:    retl # sched: [7:1.00]
2505;
2506; BROADWELL-LABEL: test_fist_fistp_fisttp:
2507; BROADWELL:       # %bb.0:
2508; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2509; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2510; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2511; BROADWELL-NEXT:    #APP
2512; BROADWELL-NEXT:    fists (%edx) # sched: [4:1.00]
2513; BROADWELL-NEXT:    fistl (%ecx) # sched: [4:1.00]
2514; BROADWELL-NEXT:    fistps (%edx) # sched: [4:1.00]
2515; BROADWELL-NEXT:    fistpl (%ecx) # sched: [4:1.00]
2516; BROADWELL-NEXT:    fistpll (%eax) # sched: [4:1.00]
2517; BROADWELL-NEXT:    fisttps (%edx) # sched: [4:1.00]
2518; BROADWELL-NEXT:    fisttpl (%ecx) # sched: [4:1.00]
2519; BROADWELL-NEXT:    fisttpll (%eax) # sched: [4:1.00]
2520; BROADWELL-NEXT:    #NO_APP
2521; BROADWELL-NEXT:    retl # sched: [6:0.50]
2522;
2523; SKYLAKE-LABEL: test_fist_fistp_fisttp:
2524; SKYLAKE:       # %bb.0:
2525; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2526; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2527; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2528; SKYLAKE-NEXT:    #APP
2529; SKYLAKE-NEXT:    fists (%edx) # sched: [4:1.00]
2530; SKYLAKE-NEXT:    fistl (%ecx) # sched: [4:1.00]
2531; SKYLAKE-NEXT:    fistps (%edx) # sched: [4:1.00]
2532; SKYLAKE-NEXT:    fistpl (%ecx) # sched: [4:1.00]
2533; SKYLAKE-NEXT:    fistpll (%eax) # sched: [4:1.00]
2534; SKYLAKE-NEXT:    fisttps (%edx) # sched: [4:1.00]
2535; SKYLAKE-NEXT:    fisttpl (%ecx) # sched: [4:1.00]
2536; SKYLAKE-NEXT:    fisttpll (%eax) # sched: [4:1.00]
2537; SKYLAKE-NEXT:    #NO_APP
2538; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2539;
2540; SKX-LABEL: test_fist_fistp_fisttp:
2541; SKX:       # %bb.0:
2542; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2543; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2544; SKX-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2545; SKX-NEXT:    #APP
2546; SKX-NEXT:    fists (%edx) # sched: [4:1.00]
2547; SKX-NEXT:    fistl (%ecx) # sched: [4:1.00]
2548; SKX-NEXT:    fistps (%edx) # sched: [4:1.00]
2549; SKX-NEXT:    fistpl (%ecx) # sched: [4:1.00]
2550; SKX-NEXT:    fistpll (%eax) # sched: [4:1.00]
2551; SKX-NEXT:    fisttps (%edx) # sched: [4:1.00]
2552; SKX-NEXT:    fisttpl (%ecx) # sched: [4:1.00]
2553; SKX-NEXT:    fisttpll (%eax) # sched: [4:1.00]
2554; SKX-NEXT:    #NO_APP
2555; SKX-NEXT:    retl # sched: [6:0.50]
2556;
2557; BTVER2-LABEL: test_fist_fistp_fisttp:
2558; BTVER2:       # %bb.0:
2559; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
2560; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
2561; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00]
2562; BTVER2-NEXT:    #APP
2563; BTVER2-NEXT:    fists (%edx) # sched: [1:1.00]
2564; BTVER2-NEXT:    fistl (%ecx) # sched: [1:1.00]
2565; BTVER2-NEXT:    fistps (%edx) # sched: [1:1.00]
2566; BTVER2-NEXT:    fistpl (%ecx) # sched: [1:1.00]
2567; BTVER2-NEXT:    fistpll (%eax) # sched: [1:1.00]
2568; BTVER2-NEXT:    fisttps (%edx) # sched: [1:1.00]
2569; BTVER2-NEXT:    fisttpl (%ecx) # sched: [1:1.00]
2570; BTVER2-NEXT:    fisttpll (%eax) # sched: [1:1.00]
2571; BTVER2-NEXT:    #NO_APP
2572; BTVER2-NEXT:    retl # sched: [4:1.00]
2573;
2574; ZNVER1-LABEL: test_fist_fistp_fisttp:
2575; ZNVER1:       # %bb.0:
2576; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
2577; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
2578; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50]
2579; ZNVER1-NEXT:    #APP
2580; ZNVER1-NEXT:    fists (%edx) # sched: [12:0.50]
2581; ZNVER1-NEXT:    fistl (%ecx) # sched: [12:0.50]
2582; ZNVER1-NEXT:    fistps (%edx) # sched: [12:0.50]
2583; ZNVER1-NEXT:    fistpl (%ecx) # sched: [12:0.50]
2584; ZNVER1-NEXT:    fistpll (%eax) # sched: [12:0.50]
2585; ZNVER1-NEXT:    fisttps (%edx) # sched: [12:0.50]
2586; ZNVER1-NEXT:    fisttpl (%ecx) # sched: [12:0.50]
2587; ZNVER1-NEXT:    fisttpll (%eax) # sched: [12:0.50]
2588; ZNVER1-NEXT:    #NO_APP
2589; ZNVER1-NEXT:    retl # sched: [1:0.50]
2590  tail call void asm sideeffect "fists $0 \0A\09 fistl $1 \0A\09 fistps $0 \0A\09 fistpl $1 \0A\09 fistpll $2 \0A\09 fisttps $0 \0A\09 fisttpl $1 \0A\09 fisttpll $2", "*m,*m,*m"(i16* %a0, i32* %a1, i64 *%a2) nounwind
2591  ret void
2592}
2593
2594define void @test_fld(i16* %a0, i32* %a1, i64 *%a2) optsize {
2595; GENERIC-LABEL: test_fld:
2596; GENERIC:       # %bb.0:
2597; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2598; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2599; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %edx
2600; GENERIC-NEXT:    #APP
2601; GENERIC-NEXT:    fld %st(0)
2602; GENERIC-NEXT:    flds (%edx)
2603; GENERIC-NEXT:    fldl (%ecx)
2604; GENERIC-NEXT:    fldt (%eax)
2605; GENERIC-NEXT:    #NO_APP
2606; GENERIC-NEXT:    retl
2607;
2608; ATOM-LABEL: test_fld:
2609; ATOM:       # %bb.0:
2610; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
2611; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
2612; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00]
2613; ATOM-NEXT:    #APP
2614; ATOM-NEXT:    fld %st(0) # sched: [1:1.00]
2615; ATOM-NEXT:    flds (%edx) # sched: [1:1.00]
2616; ATOM-NEXT:    fldl (%ecx) # sched: [1:1.00]
2617; ATOM-NEXT:    fldt (%eax) # sched: [4:2.00]
2618; ATOM-NEXT:    #NO_APP
2619; ATOM-NEXT:    retl # sched: [79:39.50]
2620;
2621; SLM-LABEL: test_fld:
2622; SLM:       # %bb.0:
2623; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
2624; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
2625; SLM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00]
2626; SLM-NEXT:    #APP
2627; SLM-NEXT:    fld %st(0) # sched: [1:0.50]
2628; SLM-NEXT:    flds (%edx) # sched: [3:1.00]
2629; SLM-NEXT:    fldl (%ecx) # sched: [3:1.00]
2630; SLM-NEXT:    fldt (%eax) # sched: [3:1.00]
2631; SLM-NEXT:    #NO_APP
2632; SLM-NEXT:    retl # sched: [4:1.00]
2633;
2634; SANDY-LABEL: test_fld:
2635; SANDY:       # %bb.0:
2636; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2637; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2638; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2639; SANDY-NEXT:    #APP
2640; SANDY-NEXT:    fld %st(0) # sched: [1:1.00]
2641; SANDY-NEXT:    flds (%edx) # sched: [9:1.00]
2642; SANDY-NEXT:    fldl (%ecx) # sched: [9:1.00]
2643; SANDY-NEXT:    fldt (%eax) # sched: [9:1.00]
2644; SANDY-NEXT:    #NO_APP
2645; SANDY-NEXT:    retl # sched: [6:1.00]
2646;
2647; HASWELL-LABEL: test_fld:
2648; HASWELL:       # %bb.0:
2649; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2650; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2651; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2652; HASWELL-NEXT:    #APP
2653; HASWELL-NEXT:    fld %st(0) # sched: [1:0.50]
2654; HASWELL-NEXT:    flds (%edx) # sched: [7:0.50]
2655; HASWELL-NEXT:    fldl (%ecx) # sched: [7:0.50]
2656; HASWELL-NEXT:    fldt (%eax) # sched: [7:0.50]
2657; HASWELL-NEXT:    #NO_APP
2658; HASWELL-NEXT:    retl # sched: [7:1.00]
2659;
2660; BROADWELL-LABEL: test_fld:
2661; BROADWELL:       # %bb.0:
2662; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2663; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2664; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2665; BROADWELL-NEXT:    #APP
2666; BROADWELL-NEXT:    fld %st(0) # sched: [1:0.25]
2667; BROADWELL-NEXT:    flds (%edx) # sched: [6:0.50]
2668; BROADWELL-NEXT:    fldl (%ecx) # sched: [6:0.50]
2669; BROADWELL-NEXT:    fldt (%eax) # sched: [6:0.50]
2670; BROADWELL-NEXT:    #NO_APP
2671; BROADWELL-NEXT:    retl # sched: [6:0.50]
2672;
2673; SKYLAKE-LABEL: test_fld:
2674; SKYLAKE:       # %bb.0:
2675; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2676; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2677; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2678; SKYLAKE-NEXT:    #APP
2679; SKYLAKE-NEXT:    fld %st(0) # sched: [1:0.25]
2680; SKYLAKE-NEXT:    flds (%edx) # sched: [7:0.50]
2681; SKYLAKE-NEXT:    fldl (%ecx) # sched: [7:0.50]
2682; SKYLAKE-NEXT:    fldt (%eax) # sched: [7:0.50]
2683; SKYLAKE-NEXT:    #NO_APP
2684; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2685;
2686; SKX-LABEL: test_fld:
2687; SKX:       # %bb.0:
2688; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2689; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2690; SKX-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
2691; SKX-NEXT:    #APP
2692; SKX-NEXT:    fld %st(0) # sched: [1:0.25]
2693; SKX-NEXT:    flds (%edx) # sched: [7:0.50]
2694; SKX-NEXT:    fldl (%ecx) # sched: [7:0.50]
2695; SKX-NEXT:    fldt (%eax) # sched: [7:0.50]
2696; SKX-NEXT:    #NO_APP
2697; SKX-NEXT:    retl # sched: [6:0.50]
2698;
2699; BTVER2-LABEL: test_fld:
2700; BTVER2:       # %bb.0:
2701; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
2702; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
2703; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00]
2704; BTVER2-NEXT:    #APP
2705; BTVER2-NEXT:    fld %st(0) # sched: [1:0.50]
2706; BTVER2-NEXT:    flds (%edx) # sched: [5:1.00]
2707; BTVER2-NEXT:    fldl (%ecx) # sched: [5:1.00]
2708; BTVER2-NEXT:    fldt (%eax) # sched: [5:1.00]
2709; BTVER2-NEXT:    #NO_APP
2710; BTVER2-NEXT:    retl # sched: [4:1.00]
2711;
2712; ZNVER1-LABEL: test_fld:
2713; ZNVER1:       # %bb.0:
2714; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
2715; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
2716; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50]
2717; ZNVER1-NEXT:    #APP
2718; ZNVER1-NEXT:    fld %st(0) # sched: [1:0.50]
2719; ZNVER1-NEXT:    flds (%edx) # sched: [8:0.50]
2720; ZNVER1-NEXT:    fldl (%ecx) # sched: [8:0.50]
2721; ZNVER1-NEXT:    fldt (%eax) # sched: [1:0.50]
2722; ZNVER1-NEXT:    #NO_APP
2723; ZNVER1-NEXT:    retl # sched: [1:0.50]
2724  tail call void asm sideeffect "fld %st(0) \0A\09 flds $0 \0A\09 fldl $1 \0A\09 fldt $2", "*m,*m,*m"(i16* %a0, i32* %a1, i64 *%a2) nounwind
2725  ret void
2726}
2727
2728define void @test_fldcw_fldenv(i8* %a0) optsize {
2729; GENERIC-LABEL: test_fldcw_fldenv:
2730; GENERIC:       # %bb.0:
2731; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2732; GENERIC-NEXT:    #APP
2733; GENERIC-NEXT:    fldcw (%eax)
2734; GENERIC-NEXT:    fldenv (%eax)
2735; GENERIC-NEXT:    #NO_APP
2736; GENERIC-NEXT:    retl
2737;
2738; ATOM-LABEL: test_fldcw_fldenv:
2739; ATOM:       # %bb.0:
2740; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
2741; ATOM-NEXT:    #APP
2742; ATOM-NEXT:    fldcw (%eax) # sched: [5:2.50]
2743; ATOM-NEXT:    fldenv (%eax) # sched: [100:0.50]
2744; ATOM-NEXT:    #NO_APP
2745; ATOM-NEXT:    retl # sched: [79:39.50]
2746;
2747; SLM-LABEL: test_fldcw_fldenv:
2748; SLM:       # %bb.0:
2749; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
2750; SLM-NEXT:    #APP
2751; SLM-NEXT:    fldcw (%eax) # sched: [3:1.00]
2752; SLM-NEXT:    fldenv (%eax) # sched: [100:1.00]
2753; SLM-NEXT:    #NO_APP
2754; SLM-NEXT:    retl # sched: [4:1.00]
2755;
2756; SANDY-LABEL: test_fldcw_fldenv:
2757; SANDY:       # %bb.0:
2758; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2759; SANDY-NEXT:    #APP
2760; SANDY-NEXT:    fldcw (%eax) # sched: [8:2.00]
2761; SANDY-NEXT:    fldenv (%eax) # sched: [100:0.33]
2762; SANDY-NEXT:    #NO_APP
2763; SANDY-NEXT:    retl # sched: [6:1.00]
2764;
2765; HASWELL-LABEL: test_fldcw_fldenv:
2766; HASWELL:       # %bb.0:
2767; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2768; HASWELL-NEXT:    #APP
2769; HASWELL-NEXT:    fldcw (%eax) # sched: [7:1.00]
2770; HASWELL-NEXT:    fldenv (%eax) # sched: [61:14.00]
2771; HASWELL-NEXT:    #NO_APP
2772; HASWELL-NEXT:    retl # sched: [7:1.00]
2773;
2774; BROADWELL-LABEL: test_fldcw_fldenv:
2775; BROADWELL:       # %bb.0:
2776; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2777; BROADWELL-NEXT:    #APP
2778; BROADWELL-NEXT:    fldcw (%eax) # sched: [7:1.00]
2779; BROADWELL-NEXT:    fldenv (%eax) # sched: [60:14.00]
2780; BROADWELL-NEXT:    #NO_APP
2781; BROADWELL-NEXT:    retl # sched: [6:0.50]
2782;
2783; SKYLAKE-LABEL: test_fldcw_fldenv:
2784; SKYLAKE:       # %bb.0:
2785; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2786; SKYLAKE-NEXT:    #APP
2787; SKYLAKE-NEXT:    fldcw (%eax) # sched: [7:1.00]
2788; SKYLAKE-NEXT:    fldenv (%eax) # sched: [62:14.00]
2789; SKYLAKE-NEXT:    #NO_APP
2790; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2791;
2792; SKX-LABEL: test_fldcw_fldenv:
2793; SKX:       # %bb.0:
2794; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2795; SKX-NEXT:    #APP
2796; SKX-NEXT:    fldcw (%eax) # sched: [7:1.00]
2797; SKX-NEXT:    fldenv (%eax) # sched: [62:14.00]
2798; SKX-NEXT:    #NO_APP
2799; SKX-NEXT:    retl # sched: [6:0.50]
2800;
2801; BTVER2-LABEL: test_fldcw_fldenv:
2802; BTVER2:       # %bb.0:
2803; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
2804; BTVER2-NEXT:    #APP
2805; BTVER2-NEXT:    fldcw (%eax) # sched: [5:1.00]
2806; BTVER2-NEXT:    fldenv (%eax) # sched: [100:0.50]
2807; BTVER2-NEXT:    #NO_APP
2808; BTVER2-NEXT:    retl # sched: [4:1.00]
2809;
2810; ZNVER1-LABEL: test_fldcw_fldenv:
2811; ZNVER1:       # %bb.0:
2812; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
2813; ZNVER1-NEXT:    #APP
2814; ZNVER1-NEXT:    fldcw (%eax) # sched: [100:0.25]
2815; ZNVER1-NEXT:    fldenv (%eax) # sched: [100:0.25]
2816; ZNVER1-NEXT:    #NO_APP
2817; ZNVER1-NEXT:    retl # sched: [1:0.50]
2818  tail call void asm sideeffect "fldcw $0 \0A\09 fldenv $0", "*m"(i8* %a0) nounwind
2819  ret void
2820}
2821
2822define void @test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz() optsize {
2823; GENERIC-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2824; GENERIC:       # %bb.0:
2825; GENERIC-NEXT:    #APP
2826; GENERIC-NEXT:    fld1
2827; GENERIC-NEXT:    fldl2e
2828; GENERIC-NEXT:    fldl2t
2829; GENERIC-NEXT:    fldlg2
2830; GENERIC-NEXT:    fldln2
2831; GENERIC-NEXT:    fldpi
2832; GENERIC-NEXT:    fldz
2833; GENERIC-NEXT:    #NO_APP
2834; GENERIC-NEXT:    retl
2835;
2836; ATOM-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2837; ATOM:       # %bb.0:
2838; ATOM-NEXT:    #APP
2839; ATOM-NEXT:    fld1 # sched: [6:3.00]
2840; ATOM-NEXT:    fldl2e # sched: [10:5.00]
2841; ATOM-NEXT:    fldl2t # sched: [10:5.00]
2842; ATOM-NEXT:    fldlg2 # sched: [10:5.00]
2843; ATOM-NEXT:    fldln2 # sched: [10:5.00]
2844; ATOM-NEXT:    fldpi # sched: [10:5.00]
2845; ATOM-NEXT:    fldz # sched: [1:0.50]
2846; ATOM-NEXT:    #NO_APP
2847; ATOM-NEXT:    retl # sched: [79:39.50]
2848;
2849; SLM-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2850; SLM:       # %bb.0:
2851; SLM-NEXT:    #APP
2852; SLM-NEXT:    fld1 # sched: [1:0.50]
2853; SLM-NEXT:    fldl2e # sched: [1:1.00]
2854; SLM-NEXT:    fldl2t # sched: [1:1.00]
2855; SLM-NEXT:    fldlg2 # sched: [1:1.00]
2856; SLM-NEXT:    fldln2 # sched: [1:1.00]
2857; SLM-NEXT:    fldpi # sched: [1:1.00]
2858; SLM-NEXT:    fldz # sched: [1:0.50]
2859; SLM-NEXT:    #NO_APP
2860; SLM-NEXT:    retl # sched: [4:1.00]
2861;
2862; SANDY-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2863; SANDY:       # %bb.0:
2864; SANDY-NEXT:    #APP
2865; SANDY-NEXT:    fld1 # sched: [1:1.00]
2866; SANDY-NEXT:    fldl2e # sched: [1:1.00]
2867; SANDY-NEXT:    fldl2t # sched: [1:1.00]
2868; SANDY-NEXT:    fldlg2 # sched: [1:1.00]
2869; SANDY-NEXT:    fldln2 # sched: [1:1.00]
2870; SANDY-NEXT:    fldpi # sched: [1:1.00]
2871; SANDY-NEXT:    fldz # sched: [1:1.00]
2872; SANDY-NEXT:    #NO_APP
2873; SANDY-NEXT:    retl # sched: [6:1.00]
2874;
2875; HASWELL-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2876; HASWELL:       # %bb.0:
2877; HASWELL-NEXT:    #APP
2878; HASWELL-NEXT:    fld1 # sched: [1:1.00]
2879; HASWELL-NEXT:    fldl2e # sched: [1:1.00]
2880; HASWELL-NEXT:    fldl2t # sched: [1:1.00]
2881; HASWELL-NEXT:    fldlg2 # sched: [1:1.00]
2882; HASWELL-NEXT:    fldln2 # sched: [1:1.00]
2883; HASWELL-NEXT:    fldpi # sched: [1:1.00]
2884; HASWELL-NEXT:    fldz # sched: [1:0.50]
2885; HASWELL-NEXT:    #NO_APP
2886; HASWELL-NEXT:    retl # sched: [7:1.00]
2887;
2888; BROADWELL-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2889; BROADWELL:       # %bb.0:
2890; BROADWELL-NEXT:    #APP
2891; BROADWELL-NEXT:    fld1 # sched: [1:1.00]
2892; BROADWELL-NEXT:    fldl2e # sched: [1:1.00]
2893; BROADWELL-NEXT:    fldl2t # sched: [1:1.00]
2894; BROADWELL-NEXT:    fldlg2 # sched: [1:1.00]
2895; BROADWELL-NEXT:    fldln2 # sched: [1:1.00]
2896; BROADWELL-NEXT:    fldpi # sched: [1:1.00]
2897; BROADWELL-NEXT:    fldz # sched: [1:0.50]
2898; BROADWELL-NEXT:    #NO_APP
2899; BROADWELL-NEXT:    retl # sched: [6:0.50]
2900;
2901; SKYLAKE-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2902; SKYLAKE:       # %bb.0:
2903; SKYLAKE-NEXT:    #APP
2904; SKYLAKE-NEXT:    fld1 # sched: [1:1.00]
2905; SKYLAKE-NEXT:    fldl2e # sched: [1:1.00]
2906; SKYLAKE-NEXT:    fldl2t # sched: [1:1.00]
2907; SKYLAKE-NEXT:    fldlg2 # sched: [1:1.00]
2908; SKYLAKE-NEXT:    fldln2 # sched: [1:1.00]
2909; SKYLAKE-NEXT:    fldpi # sched: [1:1.00]
2910; SKYLAKE-NEXT:    fldz # sched: [1:0.50]
2911; SKYLAKE-NEXT:    #NO_APP
2912; SKYLAKE-NEXT:    retl # sched: [6:0.50]
2913;
2914; SKX-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2915; SKX:       # %bb.0:
2916; SKX-NEXT:    #APP
2917; SKX-NEXT:    fld1 # sched: [1:1.00]
2918; SKX-NEXT:    fldl2e # sched: [1:1.00]
2919; SKX-NEXT:    fldl2t # sched: [1:1.00]
2920; SKX-NEXT:    fldlg2 # sched: [1:1.00]
2921; SKX-NEXT:    fldln2 # sched: [1:1.00]
2922; SKX-NEXT:    fldpi # sched: [1:1.00]
2923; SKX-NEXT:    fldz # sched: [1:0.50]
2924; SKX-NEXT:    #NO_APP
2925; SKX-NEXT:    retl # sched: [6:0.50]
2926;
2927; BTVER2-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2928; BTVER2:       # %bb.0:
2929; BTVER2-NEXT:    #APP
2930; BTVER2-NEXT:    fld1 # sched: [3:1.00]
2931; BTVER2-NEXT:    fldl2e # sched: [3:1.00]
2932; BTVER2-NEXT:    fldl2t # sched: [3:1.00]
2933; BTVER2-NEXT:    fldlg2 # sched: [3:1.00]
2934; BTVER2-NEXT:    fldln2 # sched: [3:1.00]
2935; BTVER2-NEXT:    fldpi # sched: [3:1.00]
2936; BTVER2-NEXT:    fldz # sched: [3:1.00]
2937; BTVER2-NEXT:    #NO_APP
2938; BTVER2-NEXT:    retl # sched: [4:1.00]
2939;
2940; ZNVER1-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz:
2941; ZNVER1:       # %bb.0:
2942; ZNVER1-NEXT:    #APP
2943; ZNVER1-NEXT:    fld1 # sched: [11:1.00]
2944; ZNVER1-NEXT:    fldl2e # sched: [11:1.00]
2945; ZNVER1-NEXT:    fldl2t # sched: [11:1.00]
2946; ZNVER1-NEXT:    fldlg2 # sched: [11:1.00]
2947; ZNVER1-NEXT:    fldln2 # sched: [11:1.00]
2948; ZNVER1-NEXT:    fldpi # sched: [11:1.00]
2949; ZNVER1-NEXT:    fldz # sched: [8:0.50]
2950; ZNVER1-NEXT:    #NO_APP
2951; ZNVER1-NEXT:    retl # sched: [1:0.50]
2952  tail call void asm sideeffect "fld1 \0A\09 fldl2e \0A\09 fldl2t \0A\09 fldlg2 \0A\09 fldln2 \0A\09 fldpi \0A\09 fldz", ""() nounwind
2953  ret void
2954}
2955
2956define void @test_fmul(float *%a0, double *%a1) optsize {
2957; GENERIC-LABEL: test_fmul:
2958; GENERIC:       # %bb.0:
2959; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
2960; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2961; GENERIC-NEXT:    #APP
2962; GENERIC-NEXT:    fmul %st(0), %st(1)
2963; GENERIC-NEXT:    fmul %st(2)
2964; GENERIC-NEXT:    fmuls (%ecx)
2965; GENERIC-NEXT:    fmull (%eax)
2966; GENERIC-NEXT:    #NO_APP
2967; GENERIC-NEXT:    retl
2968;
2969; ATOM-LABEL: test_fmul:
2970; ATOM:       # %bb.0:
2971; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
2972; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
2973; ATOM-NEXT:    #APP
2974; ATOM-NEXT:    fmul %st(0), %st(1) # sched: [4:4.00]
2975; ATOM-NEXT:    fmul %st(2) # sched: [4:4.00]
2976; ATOM-NEXT:    fmuls (%ecx) # sched: [4:4.00]
2977; ATOM-NEXT:    fmull (%eax) # sched: [4:4.00]
2978; ATOM-NEXT:    #NO_APP
2979; ATOM-NEXT:    retl # sched: [79:39.50]
2980;
2981; SLM-LABEL: test_fmul:
2982; SLM:       # %bb.0:
2983; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
2984; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
2985; SLM-NEXT:    #APP
2986; SLM-NEXT:    fmul %st(0), %st(1) # sched: [5:2.00]
2987; SLM-NEXT:    fmul %st(2) # sched: [5:2.00]
2988; SLM-NEXT:    fmuls (%ecx) # sched: [8:2.00]
2989; SLM-NEXT:    fmull (%eax) # sched: [8:2.00]
2990; SLM-NEXT:    #NO_APP
2991; SLM-NEXT:    retl # sched: [4:1.00]
2992;
2993; SANDY-LABEL: test_fmul:
2994; SANDY:       # %bb.0:
2995; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
2996; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
2997; SANDY-NEXT:    #APP
2998; SANDY-NEXT:    fmul %st(0), %st(1) # sched: [5:1.00]
2999; SANDY-NEXT:    fmul %st(2) # sched: [5:1.00]
3000; SANDY-NEXT:    fmuls (%ecx) # sched: [12:1.00]
3001; SANDY-NEXT:    fmull (%eax) # sched: [12:1.00]
3002; SANDY-NEXT:    #NO_APP
3003; SANDY-NEXT:    retl # sched: [6:1.00]
3004;
3005; HASWELL-LABEL: test_fmul:
3006; HASWELL:       # %bb.0:
3007; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3008; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3009; HASWELL-NEXT:    #APP
3010; HASWELL-NEXT:    fmul %st(0), %st(1) # sched: [5:1.00]
3011; HASWELL-NEXT:    fmul %st(2) # sched: [5:1.00]
3012; HASWELL-NEXT:    fmuls (%ecx) # sched: [12:1.00]
3013; HASWELL-NEXT:    fmull (%eax) # sched: [12:1.00]
3014; HASWELL-NEXT:    #NO_APP
3015; HASWELL-NEXT:    retl # sched: [7:1.00]
3016;
3017; BROADWELL-LABEL: test_fmul:
3018; BROADWELL:       # %bb.0:
3019; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3020; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3021; BROADWELL-NEXT:    #APP
3022; BROADWELL-NEXT:    fmul %st(0), %st(1) # sched: [5:1.00]
3023; BROADWELL-NEXT:    fmul %st(2) # sched: [5:1.00]
3024; BROADWELL-NEXT:    fmuls (%ecx) # sched: [11:1.00]
3025; BROADWELL-NEXT:    fmull (%eax) # sched: [11:1.00]
3026; BROADWELL-NEXT:    #NO_APP
3027; BROADWELL-NEXT:    retl # sched: [6:0.50]
3028;
3029; SKYLAKE-LABEL: test_fmul:
3030; SKYLAKE:       # %bb.0:
3031; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3032; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3033; SKYLAKE-NEXT:    #APP
3034; SKYLAKE-NEXT:    fmul %st(0), %st(1) # sched: [4:1.00]
3035; SKYLAKE-NEXT:    fmul %st(2) # sched: [4:1.00]
3036; SKYLAKE-NEXT:    fmuls (%ecx) # sched: [11:1.00]
3037; SKYLAKE-NEXT:    fmull (%eax) # sched: [11:1.00]
3038; SKYLAKE-NEXT:    #NO_APP
3039; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3040;
3041; SKX-LABEL: test_fmul:
3042; SKX:       # %bb.0:
3043; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3044; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3045; SKX-NEXT:    #APP
3046; SKX-NEXT:    fmul %st(0), %st(1) # sched: [4:1.00]
3047; SKX-NEXT:    fmul %st(2) # sched: [4:1.00]
3048; SKX-NEXT:    fmuls (%ecx) # sched: [11:1.00]
3049; SKX-NEXT:    fmull (%eax) # sched: [11:1.00]
3050; SKX-NEXT:    #NO_APP
3051; SKX-NEXT:    retl # sched: [6:0.50]
3052;
3053; BTVER2-LABEL: test_fmul:
3054; BTVER2:       # %bb.0:
3055; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
3056; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
3057; BTVER2-NEXT:    #APP
3058; BTVER2-NEXT:    fmul %st(0), %st(1) # sched: [2:1.00]
3059; BTVER2-NEXT:    fmul %st(2) # sched: [2:1.00]
3060; BTVER2-NEXT:    fmuls (%ecx) # sched: [7:1.00]
3061; BTVER2-NEXT:    fmull (%eax) # sched: [7:1.00]
3062; BTVER2-NEXT:    #NO_APP
3063; BTVER2-NEXT:    retl # sched: [4:1.00]
3064;
3065; ZNVER1-LABEL: test_fmul:
3066; ZNVER1:       # %bb.0:
3067; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
3068; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
3069; ZNVER1-NEXT:    #APP
3070; ZNVER1-NEXT:    fmul %st(0), %st(1) # sched: [3:0.50]
3071; ZNVER1-NEXT:    fmul %st(2) # sched: [3:0.50]
3072; ZNVER1-NEXT:    fmuls (%ecx) # sched: [10:0.50]
3073; ZNVER1-NEXT:    fmull (%eax) # sched: [10:0.50]
3074; ZNVER1-NEXT:    #NO_APP
3075; ZNVER1-NEXT:    retl # sched: [1:0.50]
3076  tail call void asm sideeffect "fmul %st(0), %st(1) \0A\09 fmul %st(2), %st(0) \0A\09 fmuls $0 \0A\09 fmull $1", "*m,*m"(float *%a0, double *%a1) nounwind
3077  ret void
3078}
3079
3080define void @test_fmulp_fimul(i16 *%a0, i32 *%a1) optsize {
3081; GENERIC-LABEL: test_fmulp_fimul:
3082; GENERIC:       # %bb.0:
3083; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3084; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3085; GENERIC-NEXT:    #APP
3086; GENERIC-NEXT:    fmulp %st(1)
3087; GENERIC-NEXT:    fmulp %st(2)
3088; GENERIC-NEXT:    fimuls (%ecx)
3089; GENERIC-NEXT:    fimull (%eax)
3090; GENERIC-NEXT:    #NO_APP
3091; GENERIC-NEXT:    retl
3092;
3093; ATOM-LABEL: test_fmulp_fimul:
3094; ATOM:       # %bb.0:
3095; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
3096; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
3097; ATOM-NEXT:    #APP
3098; ATOM-NEXT:    fmulp %st(1) # sched: [4:4.00]
3099; ATOM-NEXT:    fmulp %st(2) # sched: [4:4.00]
3100; ATOM-NEXT:    fimuls (%ecx) # sched: [4:4.00]
3101; ATOM-NEXT:    fimull (%eax) # sched: [4:4.00]
3102; ATOM-NEXT:    #NO_APP
3103; ATOM-NEXT:    retl # sched: [79:39.50]
3104;
3105; SLM-LABEL: test_fmulp_fimul:
3106; SLM:       # %bb.0:
3107; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
3108; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
3109; SLM-NEXT:    #APP
3110; SLM-NEXT:    fmulp %st(1) # sched: [5:2.00]
3111; SLM-NEXT:    fmulp %st(2) # sched: [5:2.00]
3112; SLM-NEXT:    fimuls (%ecx) # sched: [8:2.00]
3113; SLM-NEXT:    fimull (%eax) # sched: [8:2.00]
3114; SLM-NEXT:    #NO_APP
3115; SLM-NEXT:    retl # sched: [4:1.00]
3116;
3117; SANDY-LABEL: test_fmulp_fimul:
3118; SANDY:       # %bb.0:
3119; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3120; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3121; SANDY-NEXT:    #APP
3122; SANDY-NEXT:    fmulp %st(1) # sched: [5:1.00]
3123; SANDY-NEXT:    fmulp %st(2) # sched: [5:1.00]
3124; SANDY-NEXT:    fimuls (%ecx) # sched: [15:1.00]
3125; SANDY-NEXT:    fimull (%eax) # sched: [15:1.00]
3126; SANDY-NEXT:    #NO_APP
3127; SANDY-NEXT:    retl # sched: [6:1.00]
3128;
3129; HASWELL-LABEL: test_fmulp_fimul:
3130; HASWELL:       # %bb.0:
3131; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3132; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3133; HASWELL-NEXT:    #APP
3134; HASWELL-NEXT:    fmulp %st(1) # sched: [5:1.00]
3135; HASWELL-NEXT:    fmulp %st(2) # sched: [5:1.00]
3136; HASWELL-NEXT:    fimuls (%ecx) # sched: [15:1.00]
3137; HASWELL-NEXT:    fimull (%eax) # sched: [15:1.00]
3138; HASWELL-NEXT:    #NO_APP
3139; HASWELL-NEXT:    retl # sched: [7:1.00]
3140;
3141; BROADWELL-LABEL: test_fmulp_fimul:
3142; BROADWELL:       # %bb.0:
3143; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3144; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3145; BROADWELL-NEXT:    #APP
3146; BROADWELL-NEXT:    fmulp %st(1) # sched: [5:1.00]
3147; BROADWELL-NEXT:    fmulp %st(2) # sched: [5:1.00]
3148; BROADWELL-NEXT:    fimuls (%ecx) # sched: [14:1.00]
3149; BROADWELL-NEXT:    fimull (%eax) # sched: [14:1.00]
3150; BROADWELL-NEXT:    #NO_APP
3151; BROADWELL-NEXT:    retl # sched: [6:0.50]
3152;
3153; SKYLAKE-LABEL: test_fmulp_fimul:
3154; SKYLAKE:       # %bb.0:
3155; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3156; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3157; SKYLAKE-NEXT:    #APP
3158; SKYLAKE-NEXT:    fmulp %st(1) # sched: [4:1.00]
3159; SKYLAKE-NEXT:    fmulp %st(2) # sched: [4:1.00]
3160; SKYLAKE-NEXT:    fimuls (%ecx) # sched: [14:1.00]
3161; SKYLAKE-NEXT:    fimull (%eax) # sched: [14:1.00]
3162; SKYLAKE-NEXT:    #NO_APP
3163; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3164;
3165; SKX-LABEL: test_fmulp_fimul:
3166; SKX:       # %bb.0:
3167; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3168; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
3169; SKX-NEXT:    #APP
3170; SKX-NEXT:    fmulp %st(1) # sched: [4:1.00]
3171; SKX-NEXT:    fmulp %st(2) # sched: [4:1.00]
3172; SKX-NEXT:    fimuls (%ecx) # sched: [14:1.00]
3173; SKX-NEXT:    fimull (%eax) # sched: [14:1.00]
3174; SKX-NEXT:    #NO_APP
3175; SKX-NEXT:    retl # sched: [6:0.50]
3176;
3177; BTVER2-LABEL: test_fmulp_fimul:
3178; BTVER2:       # %bb.0:
3179; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
3180; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
3181; BTVER2-NEXT:    #APP
3182; BTVER2-NEXT:    fmulp %st(1) # sched: [2:1.00]
3183; BTVER2-NEXT:    fmulp %st(2) # sched: [2:1.00]
3184; BTVER2-NEXT:    fimuls (%ecx) # sched: [7:1.00]
3185; BTVER2-NEXT:    fimull (%eax) # sched: [7:1.00]
3186; BTVER2-NEXT:    #NO_APP
3187; BTVER2-NEXT:    retl # sched: [4:1.00]
3188;
3189; ZNVER1-LABEL: test_fmulp_fimul:
3190; ZNVER1:       # %bb.0:
3191; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
3192; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
3193; ZNVER1-NEXT:    #APP
3194; ZNVER1-NEXT:    fmulp %st(1) # sched: [3:0.50]
3195; ZNVER1-NEXT:    fmulp %st(2) # sched: [3:0.50]
3196; ZNVER1-NEXT:    fimuls (%ecx) # sched: [10:0.50]
3197; ZNVER1-NEXT:    fimull (%eax) # sched: [10:0.50]
3198; ZNVER1-NEXT:    #NO_APP
3199; ZNVER1-NEXT:    retl # sched: [1:0.50]
3200  tail call void asm sideeffect "fmulp \0A\09 fmulp %st(2), %st(0) \0A\09 fimuls $0 \0A\09 fimull $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
3201  ret void
3202}
3203
3204define void @test_fnop() optsize {
3205; GENERIC-LABEL: test_fnop:
3206; GENERIC:       # %bb.0:
3207; GENERIC-NEXT:    #APP
3208; GENERIC-NEXT:    fnop
3209; GENERIC-NEXT:    #NO_APP
3210; GENERIC-NEXT:    retl
3211;
3212; ATOM-LABEL: test_fnop:
3213; ATOM:       # %bb.0:
3214; ATOM-NEXT:    #APP
3215; ATOM-NEXT:    fnop # sched: [1:0.50]
3216; ATOM-NEXT:    #NO_APP
3217; ATOM-NEXT:    retl # sched: [79:39.50]
3218;
3219; SLM-LABEL: test_fnop:
3220; SLM:       # %bb.0:
3221; SLM-NEXT:    #APP
3222; SLM-NEXT:    fnop # sched: [1:0.50]
3223; SLM-NEXT:    #NO_APP
3224; SLM-NEXT:    retl # sched: [4:1.00]
3225;
3226; SANDY-LABEL: test_fnop:
3227; SANDY:       # %bb.0:
3228; SANDY-NEXT:    #APP
3229; SANDY-NEXT:    fnop # sched: [1:1.00]
3230; SANDY-NEXT:    #NO_APP
3231; SANDY-NEXT:    retl # sched: [6:1.00]
3232;
3233; HASWELL-LABEL: test_fnop:
3234; HASWELL:       # %bb.0:
3235; HASWELL-NEXT:    #APP
3236; HASWELL-NEXT:    fnop # sched: [1:0.50]
3237; HASWELL-NEXT:    #NO_APP
3238; HASWELL-NEXT:    retl # sched: [7:1.00]
3239;
3240; BROADWELL-LABEL: test_fnop:
3241; BROADWELL:       # %bb.0:
3242; BROADWELL-NEXT:    #APP
3243; BROADWELL-NEXT:    fnop # sched: [1:0.50]
3244; BROADWELL-NEXT:    #NO_APP
3245; BROADWELL-NEXT:    retl # sched: [6:0.50]
3246;
3247; SKYLAKE-LABEL: test_fnop:
3248; SKYLAKE:       # %bb.0:
3249; SKYLAKE-NEXT:    #APP
3250; SKYLAKE-NEXT:    fnop # sched: [1:0.50]
3251; SKYLAKE-NEXT:    #NO_APP
3252; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3253;
3254; SKX-LABEL: test_fnop:
3255; SKX:       # %bb.0:
3256; SKX-NEXT:    #APP
3257; SKX-NEXT:    fnop # sched: [1:0.50]
3258; SKX-NEXT:    #NO_APP
3259; SKX-NEXT:    retl # sched: [6:0.50]
3260;
3261; BTVER2-LABEL: test_fnop:
3262; BTVER2:       # %bb.0:
3263; BTVER2-NEXT:    #APP
3264; BTVER2-NEXT:    fnop # sched: [1:0.50]
3265; BTVER2-NEXT:    #NO_APP
3266; BTVER2-NEXT:    retl # sched: [4:1.00]
3267;
3268; ZNVER1-LABEL: test_fnop:
3269; ZNVER1:       # %bb.0:
3270; ZNVER1-NEXT:    #APP
3271; ZNVER1-NEXT:    fnop # sched: [1:1.00]
3272; ZNVER1-NEXT:    #NO_APP
3273; ZNVER1-NEXT:    retl # sched: [1:0.50]
3274  tail call void asm sideeffect "fnop", ""() nounwind
3275  ret void
3276}
3277
3278define void @test_fpatan() optsize {
3279; GENERIC-LABEL: test_fpatan:
3280; GENERIC:       # %bb.0:
3281; GENERIC-NEXT:    #APP
3282; GENERIC-NEXT:    fpatan
3283; GENERIC-NEXT:    #NO_APP
3284; GENERIC-NEXT:    retl
3285;
3286; ATOM-LABEL: test_fpatan:
3287; ATOM:       # %bb.0:
3288; ATOM-NEXT:    #APP
3289; ATOM-NEXT:    fpatan # sched: [183:91.50]
3290; ATOM-NEXT:    #NO_APP
3291; ATOM-NEXT:    retl # sched: [79:39.50]
3292;
3293; SLM-LABEL: test_fpatan:
3294; SLM:       # %bb.0:
3295; SLM-NEXT:    #APP
3296; SLM-NEXT:    fpatan # sched: [100:1.00]
3297; SLM-NEXT:    #NO_APP
3298; SLM-NEXT:    retl # sched: [4:1.00]
3299;
3300; SANDY-LABEL: test_fpatan:
3301; SANDY:       # %bb.0:
3302; SANDY-NEXT:    #APP
3303; SANDY-NEXT:    fpatan # sched: [100:0.33]
3304; SANDY-NEXT:    #NO_APP
3305; SANDY-NEXT:    retl # sched: [6:1.00]
3306;
3307; HASWELL-LABEL: test_fpatan:
3308; HASWELL:       # %bb.0:
3309; HASWELL-NEXT:    #APP
3310; HASWELL-NEXT:    fpatan # sched: [100:0.25]
3311; HASWELL-NEXT:    #NO_APP
3312; HASWELL-NEXT:    retl # sched: [7:1.00]
3313;
3314; BROADWELL-LABEL: test_fpatan:
3315; BROADWELL:       # %bb.0:
3316; BROADWELL-NEXT:    #APP
3317; BROADWELL-NEXT:    fpatan # sched: [100:0.25]
3318; BROADWELL-NEXT:    #NO_APP
3319; BROADWELL-NEXT:    retl # sched: [6:0.50]
3320;
3321; SKYLAKE-LABEL: test_fpatan:
3322; SKYLAKE:       # %bb.0:
3323; SKYLAKE-NEXT:    #APP
3324; SKYLAKE-NEXT:    fpatan # sched: [100:0.25]
3325; SKYLAKE-NEXT:    #NO_APP
3326; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3327;
3328; SKX-LABEL: test_fpatan:
3329; SKX:       # %bb.0:
3330; SKX-NEXT:    #APP
3331; SKX-NEXT:    fpatan # sched: [100:0.25]
3332; SKX-NEXT:    #NO_APP
3333; SKX-NEXT:    retl # sched: [6:0.50]
3334;
3335; BTVER2-LABEL: test_fpatan:
3336; BTVER2:       # %bb.0:
3337; BTVER2-NEXT:    #APP
3338; BTVER2-NEXT:    fpatan # sched: [100:0.50]
3339; BTVER2-NEXT:    #NO_APP
3340; BTVER2-NEXT:    retl # sched: [4:1.00]
3341;
3342; ZNVER1-LABEL: test_fpatan:
3343; ZNVER1:       # %bb.0:
3344; ZNVER1-NEXT:    #APP
3345; ZNVER1-NEXT:    fpatan # sched: [100:0.25]
3346; ZNVER1-NEXT:    #NO_APP
3347; ZNVER1-NEXT:    retl # sched: [1:0.50]
3348  tail call void asm sideeffect "fpatan", ""() nounwind
3349  ret void
3350}
3351
3352define void @test_fprem_fprem1() optsize {
3353; GENERIC-LABEL: test_fprem_fprem1:
3354; GENERIC:       # %bb.0:
3355; GENERIC-NEXT:    #APP
3356; GENERIC-NEXT:    fprem
3357; GENERIC-NEXT:    fprem1
3358; GENERIC-NEXT:    #NO_APP
3359; GENERIC-NEXT:    retl
3360;
3361; ATOM-LABEL: test_fprem_fprem1:
3362; ATOM:       # %bb.0:
3363; ATOM-NEXT:    #APP
3364; ATOM-NEXT:    fprem # sched: [55:27.50]
3365; ATOM-NEXT:    fprem1 # sched: [71:35.50]
3366; ATOM-NEXT:    #NO_APP
3367; ATOM-NEXT:    retl # sched: [79:39.50]
3368;
3369; SLM-LABEL: test_fprem_fprem1:
3370; SLM:       # %bb.0:
3371; SLM-NEXT:    #APP
3372; SLM-NEXT:    fprem # sched: [100:1.00]
3373; SLM-NEXT:    fprem1 # sched: [100:1.00]
3374; SLM-NEXT:    #NO_APP
3375; SLM-NEXT:    retl # sched: [4:1.00]
3376;
3377; SANDY-LABEL: test_fprem_fprem1:
3378; SANDY:       # %bb.0:
3379; SANDY-NEXT:    #APP
3380; SANDY-NEXT:    fprem # sched: [100:0.33]
3381; SANDY-NEXT:    fprem1 # sched: [100:0.33]
3382; SANDY-NEXT:    #NO_APP
3383; SANDY-NEXT:    retl # sched: [6:1.00]
3384;
3385; HASWELL-LABEL: test_fprem_fprem1:
3386; HASWELL:       # %bb.0:
3387; HASWELL-NEXT:    #APP
3388; HASWELL-NEXT:    fprem # sched: [19:7.00]
3389; HASWELL-NEXT:    fprem1 # sched: [27:10.25]
3390; HASWELL-NEXT:    #NO_APP
3391; HASWELL-NEXT:    retl # sched: [7:1.00]
3392;
3393; BROADWELL-LABEL: test_fprem_fprem1:
3394; BROADWELL:       # %bb.0:
3395; BROADWELL-NEXT:    #APP
3396; BROADWELL-NEXT:    fprem # sched: [100:0.25]
3397; BROADWELL-NEXT:    fprem1 # sched: [100:0.25]
3398; BROADWELL-NEXT:    #NO_APP
3399; BROADWELL-NEXT:    retl # sched: [6:0.50]
3400;
3401; SKYLAKE-LABEL: test_fprem_fprem1:
3402; SKYLAKE:       # %bb.0:
3403; SKYLAKE-NEXT:    #APP
3404; SKYLAKE-NEXT:    fprem # sched: [100:0.25]
3405; SKYLAKE-NEXT:    fprem1 # sched: [100:0.25]
3406; SKYLAKE-NEXT:    #NO_APP
3407; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3408;
3409; SKX-LABEL: test_fprem_fprem1:
3410; SKX:       # %bb.0:
3411; SKX-NEXT:    #APP
3412; SKX-NEXT:    fprem # sched: [100:0.25]
3413; SKX-NEXT:    fprem1 # sched: [100:0.25]
3414; SKX-NEXT:    #NO_APP
3415; SKX-NEXT:    retl # sched: [6:0.50]
3416;
3417; BTVER2-LABEL: test_fprem_fprem1:
3418; BTVER2:       # %bb.0:
3419; BTVER2-NEXT:    #APP
3420; BTVER2-NEXT:    fprem # sched: [100:0.50]
3421; BTVER2-NEXT:    fprem1 # sched: [100:0.50]
3422; BTVER2-NEXT:    #NO_APP
3423; BTVER2-NEXT:    retl # sched: [4:1.00]
3424;
3425; ZNVER1-LABEL: test_fprem_fprem1:
3426; ZNVER1:       # %bb.0:
3427; ZNVER1-NEXT:    #APP
3428; ZNVER1-NEXT:    fprem # sched: [100:0.25]
3429; ZNVER1-NEXT:    fprem1 # sched: [100:0.25]
3430; ZNVER1-NEXT:    #NO_APP
3431; ZNVER1-NEXT:    retl # sched: [1:0.50]
3432  tail call void asm sideeffect "fprem \0A\09 fprem1", ""() nounwind
3433  ret void
3434}
3435
3436define void @test_fptan() optsize {
3437; GENERIC-LABEL: test_fptan:
3438; GENERIC:       # %bb.0:
3439; GENERIC-NEXT:    #APP
3440; GENERIC-NEXT:    fptan
3441; GENERIC-NEXT:    #NO_APP
3442; GENERIC-NEXT:    retl
3443;
3444; ATOM-LABEL: test_fptan:
3445; ATOM:       # %bb.0:
3446; ATOM-NEXT:    #APP
3447; ATOM-NEXT:    fptan # sched: [168:84.00]
3448; ATOM-NEXT:    #NO_APP
3449; ATOM-NEXT:    retl # sched: [79:39.50]
3450;
3451; SLM-LABEL: test_fptan:
3452; SLM:       # %bb.0:
3453; SLM-NEXT:    #APP
3454; SLM-NEXT:    fptan # sched: [100:1.00]
3455; SLM-NEXT:    #NO_APP
3456; SLM-NEXT:    retl # sched: [4:1.00]
3457;
3458; SANDY-LABEL: test_fptan:
3459; SANDY:       # %bb.0:
3460; SANDY-NEXT:    #APP
3461; SANDY-NEXT:    fptan # sched: [100:0.33]
3462; SANDY-NEXT:    #NO_APP
3463; SANDY-NEXT:    retl # sched: [6:1.00]
3464;
3465; HASWELL-LABEL: test_fptan:
3466; HASWELL:       # %bb.0:
3467; HASWELL-NEXT:    #APP
3468; HASWELL-NEXT:    fptan # sched: [100:0.25]
3469; HASWELL-NEXT:    #NO_APP
3470; HASWELL-NEXT:    retl # sched: [7:1.00]
3471;
3472; BROADWELL-LABEL: test_fptan:
3473; BROADWELL:       # %bb.0:
3474; BROADWELL-NEXT:    #APP
3475; BROADWELL-NEXT:    fptan # sched: [100:0.25]
3476; BROADWELL-NEXT:    #NO_APP
3477; BROADWELL-NEXT:    retl # sched: [6:0.50]
3478;
3479; SKYLAKE-LABEL: test_fptan:
3480; SKYLAKE:       # %bb.0:
3481; SKYLAKE-NEXT:    #APP
3482; SKYLAKE-NEXT:    fptan # sched: [100:0.25]
3483; SKYLAKE-NEXT:    #NO_APP
3484; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3485;
3486; SKX-LABEL: test_fptan:
3487; SKX:       # %bb.0:
3488; SKX-NEXT:    #APP
3489; SKX-NEXT:    fptan # sched: [100:0.25]
3490; SKX-NEXT:    #NO_APP
3491; SKX-NEXT:    retl # sched: [6:0.50]
3492;
3493; BTVER2-LABEL: test_fptan:
3494; BTVER2:       # %bb.0:
3495; BTVER2-NEXT:    #APP
3496; BTVER2-NEXT:    fptan # sched: [100:0.50]
3497; BTVER2-NEXT:    #NO_APP
3498; BTVER2-NEXT:    retl # sched: [4:1.00]
3499;
3500; ZNVER1-LABEL: test_fptan:
3501; ZNVER1:       # %bb.0:
3502; ZNVER1-NEXT:    #APP
3503; ZNVER1-NEXT:    fptan # sched: [100:0.25]
3504; ZNVER1-NEXT:    #NO_APP
3505; ZNVER1-NEXT:    retl # sched: [1:0.50]
3506  tail call void asm sideeffect "fptan", ""() nounwind
3507  ret void
3508}
3509
3510define void @test_frndint() optsize {
3511; GENERIC-LABEL: test_frndint:
3512; GENERIC:       # %bb.0:
3513; GENERIC-NEXT:    #APP
3514; GENERIC-NEXT:    frndint
3515; GENERIC-NEXT:    #NO_APP
3516; GENERIC-NEXT:    retl
3517;
3518; ATOM-LABEL: test_frndint:
3519; ATOM:       # %bb.0:
3520; ATOM-NEXT:    #APP
3521; ATOM-NEXT:    frndint # sched: [46:23.00]
3522; ATOM-NEXT:    #NO_APP
3523; ATOM-NEXT:    retl # sched: [79:39.50]
3524;
3525; SLM-LABEL: test_frndint:
3526; SLM:       # %bb.0:
3527; SLM-NEXT:    #APP
3528; SLM-NEXT:    frndint # sched: [100:1.00]
3529; SLM-NEXT:    #NO_APP
3530; SLM-NEXT:    retl # sched: [4:1.00]
3531;
3532; SANDY-LABEL: test_frndint:
3533; SANDY:       # %bb.0:
3534; SANDY-NEXT:    #APP
3535; SANDY-NEXT:    frndint # sched: [100:0.33]
3536; SANDY-NEXT:    #NO_APP
3537; SANDY-NEXT:    retl # sched: [6:1.00]
3538;
3539; HASWELL-LABEL: test_frndint:
3540; HASWELL:       # %bb.0:
3541; HASWELL-NEXT:    #APP
3542; HASWELL-NEXT:    frndint # sched: [11:4.25]
3543; HASWELL-NEXT:    #NO_APP
3544; HASWELL-NEXT:    retl # sched: [7:1.00]
3545;
3546; BROADWELL-LABEL: test_frndint:
3547; BROADWELL:       # %bb.0:
3548; BROADWELL-NEXT:    #APP
3549; BROADWELL-NEXT:    frndint # sched: [100:0.25]
3550; BROADWELL-NEXT:    #NO_APP
3551; BROADWELL-NEXT:    retl # sched: [6:0.50]
3552;
3553; SKYLAKE-LABEL: test_frndint:
3554; SKYLAKE:       # %bb.0:
3555; SKYLAKE-NEXT:    #APP
3556; SKYLAKE-NEXT:    frndint # sched: [100:0.25]
3557; SKYLAKE-NEXT:    #NO_APP
3558; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3559;
3560; SKX-LABEL: test_frndint:
3561; SKX:       # %bb.0:
3562; SKX-NEXT:    #APP
3563; SKX-NEXT:    frndint # sched: [100:0.25]
3564; SKX-NEXT:    #NO_APP
3565; SKX-NEXT:    retl # sched: [6:0.50]
3566;
3567; BTVER2-LABEL: test_frndint:
3568; BTVER2:       # %bb.0:
3569; BTVER2-NEXT:    #APP
3570; BTVER2-NEXT:    frndint # sched: [100:0.50]
3571; BTVER2-NEXT:    #NO_APP
3572; BTVER2-NEXT:    retl # sched: [4:1.00]
3573;
3574; ZNVER1-LABEL: test_frndint:
3575; ZNVER1:       # %bb.0:
3576; ZNVER1-NEXT:    #APP
3577; ZNVER1-NEXT:    frndint # sched: [100:0.25]
3578; ZNVER1-NEXT:    #NO_APP
3579; ZNVER1-NEXT:    retl # sched: [1:0.50]
3580  tail call void asm sideeffect "frndint", ""() nounwind
3581  ret void
3582}
3583
3584define void @test_frstor(i8* %a0) optsize {
3585; GENERIC-LABEL: test_frstor:
3586; GENERIC:       # %bb.0:
3587; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3588; GENERIC-NEXT:    #APP
3589; GENERIC-NEXT:    frstor (%eax)
3590; GENERIC-NEXT:    #NO_APP
3591; GENERIC-NEXT:    retl
3592;
3593; ATOM-LABEL: test_frstor:
3594; ATOM:       # %bb.0:
3595; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
3596; ATOM-NEXT:    #APP
3597; ATOM-NEXT:    frstor (%eax) # sched: [100:0.50]
3598; ATOM-NEXT:    #NO_APP
3599; ATOM-NEXT:    retl # sched: [79:39.50]
3600;
3601; SLM-LABEL: test_frstor:
3602; SLM:       # %bb.0:
3603; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
3604; SLM-NEXT:    #APP
3605; SLM-NEXT:    frstor (%eax) # sched: [100:1.00]
3606; SLM-NEXT:    #NO_APP
3607; SLM-NEXT:    retl # sched: [4:1.00]
3608;
3609; SANDY-LABEL: test_frstor:
3610; SANDY:       # %bb.0:
3611; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3612; SANDY-NEXT:    #APP
3613; SANDY-NEXT:    frstor (%eax) # sched: [100:0.33]
3614; SANDY-NEXT:    #NO_APP
3615; SANDY-NEXT:    retl # sched: [6:1.00]
3616;
3617; HASWELL-LABEL: test_frstor:
3618; HASWELL:       # %bb.0:
3619; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3620; HASWELL-NEXT:    #APP
3621; HASWELL-NEXT:    frstor (%eax) # sched: [1:22.50]
3622; HASWELL-NEXT:    #NO_APP
3623; HASWELL-NEXT:    retl # sched: [7:1.00]
3624;
3625; BROADWELL-LABEL: test_frstor:
3626; BROADWELL:       # %bb.0:
3627; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3628; BROADWELL-NEXT:    #APP
3629; BROADWELL-NEXT:    frstor (%eax) # sched: [100:0.25]
3630; BROADWELL-NEXT:    #NO_APP
3631; BROADWELL-NEXT:    retl # sched: [6:0.50]
3632;
3633; SKYLAKE-LABEL: test_frstor:
3634; SKYLAKE:       # %bb.0:
3635; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3636; SKYLAKE-NEXT:    #APP
3637; SKYLAKE-NEXT:    frstor (%eax) # sched: [100:0.25]
3638; SKYLAKE-NEXT:    #NO_APP
3639; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3640;
3641; SKX-LABEL: test_frstor:
3642; SKX:       # %bb.0:
3643; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3644; SKX-NEXT:    #APP
3645; SKX-NEXT:    frstor (%eax) # sched: [100:0.25]
3646; SKX-NEXT:    #NO_APP
3647; SKX-NEXT:    retl # sched: [6:0.50]
3648;
3649; BTVER2-LABEL: test_frstor:
3650; BTVER2:       # %bb.0:
3651; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
3652; BTVER2-NEXT:    #APP
3653; BTVER2-NEXT:    frstor (%eax) # sched: [100:0.50]
3654; BTVER2-NEXT:    #NO_APP
3655; BTVER2-NEXT:    retl # sched: [4:1.00]
3656;
3657; ZNVER1-LABEL: test_frstor:
3658; ZNVER1:       # %bb.0:
3659; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
3660; ZNVER1-NEXT:    #APP
3661; ZNVER1-NEXT:    frstor (%eax) # sched: [100:0.25]
3662; ZNVER1-NEXT:    #NO_APP
3663; ZNVER1-NEXT:    retl # sched: [1:0.50]
3664  tail call void asm sideeffect "frstor $0", "*m"(i8* %a0) nounwind
3665  ret void
3666}
3667
3668define void @test_fsave(i8* %a0) optsize {
3669; GENERIC-LABEL: test_fsave:
3670; GENERIC:       # %bb.0:
3671; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3672; GENERIC-NEXT:    #APP
3673; GENERIC-NEXT:    wait
3674; GENERIC-NEXT:    fnsave (%eax)
3675; GENERIC-NEXT:    #NO_APP
3676; GENERIC-NEXT:    retl
3677;
3678; ATOM-LABEL: test_fsave:
3679; ATOM:       # %bb.0:
3680; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
3681; ATOM-NEXT:    #APP
3682; ATOM-NEXT:    wait # sched: [1:0.50]
3683; ATOM-NEXT:    fnsave (%eax) # sched: [100:0.50]
3684; ATOM-NEXT:    #NO_APP
3685; ATOM-NEXT:    retl # sched: [79:39.50]
3686;
3687; SLM-LABEL: test_fsave:
3688; SLM:       # %bb.0:
3689; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
3690; SLM-NEXT:    #APP
3691; SLM-NEXT:    wait # sched: [100:1.00]
3692; SLM-NEXT:    fnsave (%eax) # sched: [100:1.00]
3693; SLM-NEXT:    #NO_APP
3694; SLM-NEXT:    retl # sched: [4:1.00]
3695;
3696; SANDY-LABEL: test_fsave:
3697; SANDY:       # %bb.0:
3698; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3699; SANDY-NEXT:    #APP
3700; SANDY-NEXT:    wait # sched: [100:0.33]
3701; SANDY-NEXT:    fnsave (%eax) # sched: [100:0.33]
3702; SANDY-NEXT:    #NO_APP
3703; SANDY-NEXT:    retl # sched: [6:1.00]
3704;
3705; HASWELL-LABEL: test_fsave:
3706; HASWELL:       # %bb.0:
3707; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3708; HASWELL-NEXT:    #APP
3709; HASWELL-NEXT:    wait # sched: [2:0.50]
3710; HASWELL-NEXT:    fnsave (%eax) # sched: [1:36.75]
3711; HASWELL-NEXT:    #NO_APP
3712; HASWELL-NEXT:    retl # sched: [7:1.00]
3713;
3714; BROADWELL-LABEL: test_fsave:
3715; BROADWELL:       # %bb.0:
3716; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3717; BROADWELL-NEXT:    #APP
3718; BROADWELL-NEXT:    wait # sched: [2:0.50]
3719; BROADWELL-NEXT:    fnsave (%eax) # sched: [100:0.25]
3720; BROADWELL-NEXT:    #NO_APP
3721; BROADWELL-NEXT:    retl # sched: [6:0.50]
3722;
3723; SKYLAKE-LABEL: test_fsave:
3724; SKYLAKE:       # %bb.0:
3725; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3726; SKYLAKE-NEXT:    #APP
3727; SKYLAKE-NEXT:    wait # sched: [2:0.50]
3728; SKYLAKE-NEXT:    fnsave (%eax) # sched: [100:0.25]
3729; SKYLAKE-NEXT:    #NO_APP
3730; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3731;
3732; SKX-LABEL: test_fsave:
3733; SKX:       # %bb.0:
3734; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3735; SKX-NEXT:    #APP
3736; SKX-NEXT:    wait # sched: [2:0.50]
3737; SKX-NEXT:    fnsave (%eax) # sched: [100:0.25]
3738; SKX-NEXT:    #NO_APP
3739; SKX-NEXT:    retl # sched: [6:0.50]
3740;
3741; BTVER2-LABEL: test_fsave:
3742; BTVER2:       # %bb.0:
3743; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
3744; BTVER2-NEXT:    #APP
3745; BTVER2-NEXT:    wait # sched: [100:0.50]
3746; BTVER2-NEXT:    fnsave (%eax) # sched: [100:0.50]
3747; BTVER2-NEXT:    #NO_APP
3748; BTVER2-NEXT:    retl # sched: [4:1.00]
3749;
3750; ZNVER1-LABEL: test_fsave:
3751; ZNVER1:       # %bb.0:
3752; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
3753; ZNVER1-NEXT:    #APP
3754; ZNVER1-NEXT:    wait # sched: [1:1.00]
3755; ZNVER1-NEXT:    fnsave (%eax) # sched: [100:0.25]
3756; ZNVER1-NEXT:    #NO_APP
3757; ZNVER1-NEXT:    retl # sched: [1:0.50]
3758  tail call void asm sideeffect "fsave $0", "*m"(i8* %a0) nounwind
3759  ret void
3760}
3761
3762define void @test_fnsave(i8* %a0) optsize {
3763; GENERIC-LABEL: test_fnsave:
3764; GENERIC:       # %bb.0:
3765; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
3766; GENERIC-NEXT:    #APP
3767; GENERIC-NEXT:    fnsave (%eax)
3768; GENERIC-NEXT:    #NO_APP
3769; GENERIC-NEXT:    retl
3770;
3771; ATOM-LABEL: test_fnsave:
3772; ATOM:       # %bb.0:
3773; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
3774; ATOM-NEXT:    #APP
3775; ATOM-NEXT:    fnsave (%eax) # sched: [100:0.50]
3776; ATOM-NEXT:    #NO_APP
3777; ATOM-NEXT:    retl # sched: [79:39.50]
3778;
3779; SLM-LABEL: test_fnsave:
3780; SLM:       # %bb.0:
3781; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
3782; SLM-NEXT:    #APP
3783; SLM-NEXT:    fnsave (%eax) # sched: [100:1.00]
3784; SLM-NEXT:    #NO_APP
3785; SLM-NEXT:    retl # sched: [4:1.00]
3786;
3787; SANDY-LABEL: test_fnsave:
3788; SANDY:       # %bb.0:
3789; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3790; SANDY-NEXT:    #APP
3791; SANDY-NEXT:    fnsave (%eax) # sched: [100:0.33]
3792; SANDY-NEXT:    #NO_APP
3793; SANDY-NEXT:    retl # sched: [6:1.00]
3794;
3795; HASWELL-LABEL: test_fnsave:
3796; HASWELL:       # %bb.0:
3797; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3798; HASWELL-NEXT:    #APP
3799; HASWELL-NEXT:    fnsave (%eax) # sched: [1:36.75]
3800; HASWELL-NEXT:    #NO_APP
3801; HASWELL-NEXT:    retl # sched: [7:1.00]
3802;
3803; BROADWELL-LABEL: test_fnsave:
3804; BROADWELL:       # %bb.0:
3805; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3806; BROADWELL-NEXT:    #APP
3807; BROADWELL-NEXT:    fnsave (%eax) # sched: [100:0.25]
3808; BROADWELL-NEXT:    #NO_APP
3809; BROADWELL-NEXT:    retl # sched: [6:0.50]
3810;
3811; SKYLAKE-LABEL: test_fnsave:
3812; SKYLAKE:       # %bb.0:
3813; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3814; SKYLAKE-NEXT:    #APP
3815; SKYLAKE-NEXT:    fnsave (%eax) # sched: [100:0.25]
3816; SKYLAKE-NEXT:    #NO_APP
3817; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3818;
3819; SKX-LABEL: test_fnsave:
3820; SKX:       # %bb.0:
3821; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
3822; SKX-NEXT:    #APP
3823; SKX-NEXT:    fnsave (%eax) # sched: [100:0.25]
3824; SKX-NEXT:    #NO_APP
3825; SKX-NEXT:    retl # sched: [6:0.50]
3826;
3827; BTVER2-LABEL: test_fnsave:
3828; BTVER2:       # %bb.0:
3829; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
3830; BTVER2-NEXT:    #APP
3831; BTVER2-NEXT:    fnsave (%eax) # sched: [100:0.50]
3832; BTVER2-NEXT:    #NO_APP
3833; BTVER2-NEXT:    retl # sched: [4:1.00]
3834;
3835; ZNVER1-LABEL: test_fnsave:
3836; ZNVER1:       # %bb.0:
3837; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
3838; ZNVER1-NEXT:    #APP
3839; ZNVER1-NEXT:    fnsave (%eax) # sched: [100:0.25]
3840; ZNVER1-NEXT:    #NO_APP
3841; ZNVER1-NEXT:    retl # sched: [1:0.50]
3842  tail call void asm sideeffect "fnsave $0", "*m"(i8* %a0) nounwind
3843  ret void
3844}
3845
3846define void @test_fscale() optsize {
3847; GENERIC-LABEL: test_fscale:
3848; GENERIC:       # %bb.0:
3849; GENERIC-NEXT:    #APP
3850; GENERIC-NEXT:    fscale
3851; GENERIC-NEXT:    #NO_APP
3852; GENERIC-NEXT:    retl
3853;
3854; ATOM-LABEL: test_fscale:
3855; ATOM:       # %bb.0:
3856; ATOM-NEXT:    #APP
3857; ATOM-NEXT:    fscale # sched: [77:38.50]
3858; ATOM-NEXT:    #NO_APP
3859; ATOM-NEXT:    retl # sched: [79:39.50]
3860;
3861; SLM-LABEL: test_fscale:
3862; SLM:       # %bb.0:
3863; SLM-NEXT:    #APP
3864; SLM-NEXT:    fscale # sched: [100:1.00]
3865; SLM-NEXT:    #NO_APP
3866; SLM-NEXT:    retl # sched: [4:1.00]
3867;
3868; SANDY-LABEL: test_fscale:
3869; SANDY:       # %bb.0:
3870; SANDY-NEXT:    #APP
3871; SANDY-NEXT:    fscale # sched: [100:0.33]
3872; SANDY-NEXT:    #NO_APP
3873; SANDY-NEXT:    retl # sched: [6:1.00]
3874;
3875; HASWELL-LABEL: test_fscale:
3876; HASWELL:       # %bb.0:
3877; HASWELL-NEXT:    #APP
3878; HASWELL-NEXT:    fscale # sched: [75:12.50]
3879; HASWELL-NEXT:    #NO_APP
3880; HASWELL-NEXT:    retl # sched: [7:1.00]
3881;
3882; BROADWELL-LABEL: test_fscale:
3883; BROADWELL:       # %bb.0:
3884; BROADWELL-NEXT:    #APP
3885; BROADWELL-NEXT:    fscale # sched: [100:0.25]
3886; BROADWELL-NEXT:    #NO_APP
3887; BROADWELL-NEXT:    retl # sched: [6:0.50]
3888;
3889; SKYLAKE-LABEL: test_fscale:
3890; SKYLAKE:       # %bb.0:
3891; SKYLAKE-NEXT:    #APP
3892; SKYLAKE-NEXT:    fscale # sched: [100:0.25]
3893; SKYLAKE-NEXT:    #NO_APP
3894; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3895;
3896; SKX-LABEL: test_fscale:
3897; SKX:       # %bb.0:
3898; SKX-NEXT:    #APP
3899; SKX-NEXT:    fscale # sched: [100:0.25]
3900; SKX-NEXT:    #NO_APP
3901; SKX-NEXT:    retl # sched: [6:0.50]
3902;
3903; BTVER2-LABEL: test_fscale:
3904; BTVER2:       # %bb.0:
3905; BTVER2-NEXT:    #APP
3906; BTVER2-NEXT:    fscale # sched: [100:0.50]
3907; BTVER2-NEXT:    #NO_APP
3908; BTVER2-NEXT:    retl # sched: [4:1.00]
3909;
3910; ZNVER1-LABEL: test_fscale:
3911; ZNVER1:       # %bb.0:
3912; ZNVER1-NEXT:    #APP
3913; ZNVER1-NEXT:    fscale # sched: [100:0.25]
3914; ZNVER1-NEXT:    #NO_APP
3915; ZNVER1-NEXT:    retl # sched: [1:0.50]
3916  tail call void asm sideeffect "fscale", ""() nounwind
3917  ret void
3918}
3919
3920define void @test_fsin() optsize {
3921; GENERIC-LABEL: test_fsin:
3922; GENERIC:       # %bb.0:
3923; GENERIC-NEXT:    #APP
3924; GENERIC-NEXT:    fsin
3925; GENERIC-NEXT:    #NO_APP
3926; GENERIC-NEXT:    retl
3927;
3928; ATOM-LABEL: test_fsin:
3929; ATOM:       # %bb.0:
3930; ATOM-NEXT:    #APP
3931; ATOM-NEXT:    fsin # sched: [174:87.00]
3932; ATOM-NEXT:    #NO_APP
3933; ATOM-NEXT:    retl # sched: [79:39.50]
3934;
3935; SLM-LABEL: test_fsin:
3936; SLM:       # %bb.0:
3937; SLM-NEXT:    #APP
3938; SLM-NEXT:    fsin # sched: [100:1.00]
3939; SLM-NEXT:    #NO_APP
3940; SLM-NEXT:    retl # sched: [4:1.00]
3941;
3942; SANDY-LABEL: test_fsin:
3943; SANDY:       # %bb.0:
3944; SANDY-NEXT:    #APP
3945; SANDY-NEXT:    fsin # sched: [100:0.33]
3946; SANDY-NEXT:    #NO_APP
3947; SANDY-NEXT:    retl # sched: [6:1.00]
3948;
3949; HASWELL-LABEL: test_fsin:
3950; HASWELL:       # %bb.0:
3951; HASWELL-NEXT:    #APP
3952; HASWELL-NEXT:    fsin # sched: [100:0.25]
3953; HASWELL-NEXT:    #NO_APP
3954; HASWELL-NEXT:    retl # sched: [7:1.00]
3955;
3956; BROADWELL-LABEL: test_fsin:
3957; BROADWELL:       # %bb.0:
3958; BROADWELL-NEXT:    #APP
3959; BROADWELL-NEXT:    fsin # sched: [100:0.25]
3960; BROADWELL-NEXT:    #NO_APP
3961; BROADWELL-NEXT:    retl # sched: [6:0.50]
3962;
3963; SKYLAKE-LABEL: test_fsin:
3964; SKYLAKE:       # %bb.0:
3965; SKYLAKE-NEXT:    #APP
3966; SKYLAKE-NEXT:    fsin # sched: [100:0.25]
3967; SKYLAKE-NEXT:    #NO_APP
3968; SKYLAKE-NEXT:    retl # sched: [6:0.50]
3969;
3970; SKX-LABEL: test_fsin:
3971; SKX:       # %bb.0:
3972; SKX-NEXT:    #APP
3973; SKX-NEXT:    fsin # sched: [100:0.25]
3974; SKX-NEXT:    #NO_APP
3975; SKX-NEXT:    retl # sched: [6:0.50]
3976;
3977; BTVER2-LABEL: test_fsin:
3978; BTVER2:       # %bb.0:
3979; BTVER2-NEXT:    #APP
3980; BTVER2-NEXT:    fsin # sched: [100:0.50]
3981; BTVER2-NEXT:    #NO_APP
3982; BTVER2-NEXT:    retl # sched: [4:1.00]
3983;
3984; ZNVER1-LABEL: test_fsin:
3985; ZNVER1:       # %bb.0:
3986; ZNVER1-NEXT:    #APP
3987; ZNVER1-NEXT:    fsin # sched: [100:0.25]
3988; ZNVER1-NEXT:    #NO_APP
3989; ZNVER1-NEXT:    retl # sched: [1:0.50]
3990  tail call void asm sideeffect "fsin", ""() nounwind
3991  ret void
3992}
3993
3994define void @test_fsincos() optsize {
3995; GENERIC-LABEL: test_fsincos:
3996; GENERIC:       # %bb.0:
3997; GENERIC-NEXT:    #APP
3998; GENERIC-NEXT:    fsincos
3999; GENERIC-NEXT:    #NO_APP
4000; GENERIC-NEXT:    retl
4001;
4002; ATOM-LABEL: test_fsincos:
4003; ATOM:       # %bb.0:
4004; ATOM-NEXT:    #APP
4005; ATOM-NEXT:    fsincos # sched: [174:87.00]
4006; ATOM-NEXT:    #NO_APP
4007; ATOM-NEXT:    retl # sched: [79:39.50]
4008;
4009; SLM-LABEL: test_fsincos:
4010; SLM:       # %bb.0:
4011; SLM-NEXT:    #APP
4012; SLM-NEXT:    fsincos # sched: [100:1.00]
4013; SLM-NEXT:    #NO_APP
4014; SLM-NEXT:    retl # sched: [4:1.00]
4015;
4016; SANDY-LABEL: test_fsincos:
4017; SANDY:       # %bb.0:
4018; SANDY-NEXT:    #APP
4019; SANDY-NEXT:    fsincos # sched: [100:0.33]
4020; SANDY-NEXT:    #NO_APP
4021; SANDY-NEXT:    retl # sched: [6:1.00]
4022;
4023; HASWELL-LABEL: test_fsincos:
4024; HASWELL:       # %bb.0:
4025; HASWELL-NEXT:    #APP
4026; HASWELL-NEXT:    fsincos # sched: [100:0.25]
4027; HASWELL-NEXT:    #NO_APP
4028; HASWELL-NEXT:    retl # sched: [7:1.00]
4029;
4030; BROADWELL-LABEL: test_fsincos:
4031; BROADWELL:       # %bb.0:
4032; BROADWELL-NEXT:    #APP
4033; BROADWELL-NEXT:    fsincos # sched: [100:0.25]
4034; BROADWELL-NEXT:    #NO_APP
4035; BROADWELL-NEXT:    retl # sched: [6:0.50]
4036;
4037; SKYLAKE-LABEL: test_fsincos:
4038; SKYLAKE:       # %bb.0:
4039; SKYLAKE-NEXT:    #APP
4040; SKYLAKE-NEXT:    fsincos # sched: [100:0.25]
4041; SKYLAKE-NEXT:    #NO_APP
4042; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4043;
4044; SKX-LABEL: test_fsincos:
4045; SKX:       # %bb.0:
4046; SKX-NEXT:    #APP
4047; SKX-NEXT:    fsincos # sched: [100:0.25]
4048; SKX-NEXT:    #NO_APP
4049; SKX-NEXT:    retl # sched: [6:0.50]
4050;
4051; BTVER2-LABEL: test_fsincos:
4052; BTVER2:       # %bb.0:
4053; BTVER2-NEXT:    #APP
4054; BTVER2-NEXT:    fsincos # sched: [100:0.50]
4055; BTVER2-NEXT:    #NO_APP
4056; BTVER2-NEXT:    retl # sched: [4:1.00]
4057;
4058; ZNVER1-LABEL: test_fsincos:
4059; ZNVER1:       # %bb.0:
4060; ZNVER1-NEXT:    #APP
4061; ZNVER1-NEXT:    fsincos # sched: [100:0.25]
4062; ZNVER1-NEXT:    #NO_APP
4063; ZNVER1-NEXT:    retl # sched: [1:0.50]
4064  tail call void asm sideeffect "fsincos", ""() nounwind
4065  ret void
4066}
4067
4068define void @test_fsqrt() optsize {
4069; GENERIC-LABEL: test_fsqrt:
4070; GENERIC:       # %bb.0:
4071; GENERIC-NEXT:    #APP
4072; GENERIC-NEXT:    fsqrt
4073; GENERIC-NEXT:    #NO_APP
4074; GENERIC-NEXT:    retl
4075;
4076; ATOM-LABEL: test_fsqrt:
4077; ATOM:       # %bb.0:
4078; ATOM-NEXT:    #APP
4079; ATOM-NEXT:    fsqrt # sched: [71:35.50]
4080; ATOM-NEXT:    #NO_APP
4081; ATOM-NEXT:    retl # sched: [79:39.50]
4082;
4083; SLM-LABEL: test_fsqrt:
4084; SLM:       # %bb.0:
4085; SLM-NEXT:    #APP
4086; SLM-NEXT:    fsqrt # sched: [40:40.00]
4087; SLM-NEXT:    #NO_APP
4088; SLM-NEXT:    retl # sched: [4:1.00]
4089;
4090; SANDY-LABEL: test_fsqrt:
4091; SANDY:       # %bb.0:
4092; SANDY-NEXT:    #APP
4093; SANDY-NEXT:    fsqrt # sched: [24:24.00]
4094; SANDY-NEXT:    #NO_APP
4095; SANDY-NEXT:    retl # sched: [6:1.00]
4096;
4097; HASWELL-LABEL: test_fsqrt:
4098; HASWELL:       # %bb.0:
4099; HASWELL-NEXT:    #APP
4100; HASWELL-NEXT:    fsqrt # sched: [23:17.00]
4101; HASWELL-NEXT:    #NO_APP
4102; HASWELL-NEXT:    retl # sched: [7:1.00]
4103;
4104; BROADWELL-LABEL: test_fsqrt:
4105; BROADWELL:       # %bb.0:
4106; BROADWELL-NEXT:    #APP
4107; BROADWELL-NEXT:    fsqrt # sched: [23:9.00]
4108; BROADWELL-NEXT:    #NO_APP
4109; BROADWELL-NEXT:    retl # sched: [6:0.50]
4110;
4111; SKYLAKE-LABEL: test_fsqrt:
4112; SKYLAKE:       # %bb.0:
4113; SKYLAKE-NEXT:    #APP
4114; SKYLAKE-NEXT:    fsqrt # sched: [21:7.00]
4115; SKYLAKE-NEXT:    #NO_APP
4116; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4117;
4118; SKX-LABEL: test_fsqrt:
4119; SKX:       # %bb.0:
4120; SKX-NEXT:    #APP
4121; SKX-NEXT:    fsqrt # sched: [21:7.00]
4122; SKX-NEXT:    #NO_APP
4123; SKX-NEXT:    retl # sched: [6:0.50]
4124;
4125; BTVER2-LABEL: test_fsqrt:
4126; BTVER2:       # %bb.0:
4127; BTVER2-NEXT:    #APP
4128; BTVER2-NEXT:    fsqrt # sched: [35:35.00]
4129; BTVER2-NEXT:    #NO_APP
4130; BTVER2-NEXT:    retl # sched: [4:1.00]
4131;
4132; ZNVER1-LABEL: test_fsqrt:
4133; ZNVER1:       # %bb.0:
4134; ZNVER1-NEXT:    #APP
4135; ZNVER1-NEXT:    fsqrt # sched: [20:20.00]
4136; ZNVER1-NEXT:    #NO_APP
4137; ZNVER1-NEXT:    retl # sched: [1:0.50]
4138  tail call void asm sideeffect "fsqrt", ""() nounwind
4139  ret void
4140}
4141
4142define void @test_fst_fstp(i16* %a0, i32* %a1, i64 *%a2) optsize {
4143; GENERIC-LABEL: test_fst_fstp:
4144; GENERIC:       # %bb.0:
4145; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4146; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4147; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %edx
4148; GENERIC-NEXT:    #APP
4149; GENERIC-NEXT:    fst %st(0)
4150; GENERIC-NEXT:    fsts (%edx)
4151; GENERIC-NEXT:    fstl (%ecx)
4152; GENERIC-NEXT:    fstp %st(0)
4153; GENERIC-NEXT:    fstpl (%edx)
4154; GENERIC-NEXT:    fstpl (%ecx)
4155; GENERIC-NEXT:    fstpt (%eax)
4156; GENERIC-NEXT:    #NO_APP
4157; GENERIC-NEXT:    retl
4158;
4159; ATOM-LABEL: test_fst_fstp:
4160; ATOM:       # %bb.0:
4161; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4162; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
4163; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00]
4164; ATOM-NEXT:    #APP
4165; ATOM-NEXT:    fst %st(0) # sched: [2:1.00]
4166; ATOM-NEXT:    fsts (%edx) # sched: [2:1.00]
4167; ATOM-NEXT:    fstl (%ecx) # sched: [2:1.00]
4168; ATOM-NEXT:    fstp %st(0) # sched: [2:1.00]
4169; ATOM-NEXT:    fstpl (%edx) # sched: [2:1.00]
4170; ATOM-NEXT:    fstpl (%ecx) # sched: [2:1.00]
4171; ATOM-NEXT:    fstpt (%eax) # sched: [5:2.50]
4172; ATOM-NEXT:    #NO_APP
4173; ATOM-NEXT:    retl # sched: [79:39.50]
4174;
4175; SLM-LABEL: test_fst_fstp:
4176; SLM:       # %bb.0:
4177; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4178; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
4179; SLM-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00]
4180; SLM-NEXT:    #APP
4181; SLM-NEXT:    fst %st(0) # sched: [1:0.50]
4182; SLM-NEXT:    fsts (%edx) # sched: [1:1.00]
4183; SLM-NEXT:    fstl (%ecx) # sched: [1:1.00]
4184; SLM-NEXT:    fstp %st(0) # sched: [1:0.50]
4185; SLM-NEXT:    fstpl (%edx) # sched: [1:1.00]
4186; SLM-NEXT:    fstpl (%ecx) # sched: [1:1.00]
4187; SLM-NEXT:    fstpt (%eax) # sched: [1:1.00]
4188; SLM-NEXT:    #NO_APP
4189; SLM-NEXT:    retl # sched: [4:1.00]
4190;
4191; SANDY-LABEL: test_fst_fstp:
4192; SANDY:       # %bb.0:
4193; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4194; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4195; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
4196; SANDY-NEXT:    #APP
4197; SANDY-NEXT:    fst %st(0) # sched: [1:1.00]
4198; SANDY-NEXT:    fsts (%edx) # sched: [6:1.00]
4199; SANDY-NEXT:    fstl (%ecx) # sched: [6:1.00]
4200; SANDY-NEXT:    fstp %st(0) # sched: [1:1.00]
4201; SANDY-NEXT:    fstpl (%edx) # sched: [6:1.00]
4202; SANDY-NEXT:    fstpl (%ecx) # sched: [6:1.00]
4203; SANDY-NEXT:    fstpt (%eax) # sched: [6:1.00]
4204; SANDY-NEXT:    #NO_APP
4205; SANDY-NEXT:    retl # sched: [6:1.00]
4206;
4207; HASWELL-LABEL: test_fst_fstp:
4208; HASWELL:       # %bb.0:
4209; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4210; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4211; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
4212; HASWELL-NEXT:    #APP
4213; HASWELL-NEXT:    fst %st(0) # sched: [1:0.50]
4214; HASWELL-NEXT:    fsts (%edx) # sched: [1:1.00]
4215; HASWELL-NEXT:    fstl (%ecx) # sched: [1:1.00]
4216; HASWELL-NEXT:    fstp %st(0) # sched: [1:0.50]
4217; HASWELL-NEXT:    fstpl (%edx) # sched: [1:1.00]
4218; HASWELL-NEXT:    fstpl (%ecx) # sched: [1:1.00]
4219; HASWELL-NEXT:    fstpt (%eax) # sched: [1:1.00]
4220; HASWELL-NEXT:    #NO_APP
4221; HASWELL-NEXT:    retl # sched: [7:1.00]
4222;
4223; BROADWELL-LABEL: test_fst_fstp:
4224; BROADWELL:       # %bb.0:
4225; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4226; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4227; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
4228; BROADWELL-NEXT:    #APP
4229; BROADWELL-NEXT:    fst %st(0) # sched: [1:0.25]
4230; BROADWELL-NEXT:    fsts (%edx) # sched: [1:1.00]
4231; BROADWELL-NEXT:    fstl (%ecx) # sched: [1:1.00]
4232; BROADWELL-NEXT:    fstp %st(0) # sched: [1:0.25]
4233; BROADWELL-NEXT:    fstpl (%edx) # sched: [1:1.00]
4234; BROADWELL-NEXT:    fstpl (%ecx) # sched: [1:1.00]
4235; BROADWELL-NEXT:    fstpt (%eax) # sched: [1:1.00]
4236; BROADWELL-NEXT:    #NO_APP
4237; BROADWELL-NEXT:    retl # sched: [6:0.50]
4238;
4239; SKYLAKE-LABEL: test_fst_fstp:
4240; SKYLAKE:       # %bb.0:
4241; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4242; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4243; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
4244; SKYLAKE-NEXT:    #APP
4245; SKYLAKE-NEXT:    fst %st(0) # sched: [1:0.25]
4246; SKYLAKE-NEXT:    fsts (%edx) # sched: [1:1.00]
4247; SKYLAKE-NEXT:    fstl (%ecx) # sched: [1:1.00]
4248; SKYLAKE-NEXT:    fstp %st(0) # sched: [1:0.25]
4249; SKYLAKE-NEXT:    fstpl (%edx) # sched: [1:1.00]
4250; SKYLAKE-NEXT:    fstpl (%ecx) # sched: [1:1.00]
4251; SKYLAKE-NEXT:    fstpt (%eax) # sched: [1:1.00]
4252; SKYLAKE-NEXT:    #NO_APP
4253; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4254;
4255; SKX-LABEL: test_fst_fstp:
4256; SKX:       # %bb.0:
4257; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4258; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4259; SKX-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50]
4260; SKX-NEXT:    #APP
4261; SKX-NEXT:    fst %st(0) # sched: [1:0.25]
4262; SKX-NEXT:    fsts (%edx) # sched: [1:1.00]
4263; SKX-NEXT:    fstl (%ecx) # sched: [1:1.00]
4264; SKX-NEXT:    fstp %st(0) # sched: [1:0.25]
4265; SKX-NEXT:    fstpl (%edx) # sched: [1:1.00]
4266; SKX-NEXT:    fstpl (%ecx) # sched: [1:1.00]
4267; SKX-NEXT:    fstpt (%eax) # sched: [1:1.00]
4268; SKX-NEXT:    #NO_APP
4269; SKX-NEXT:    retl # sched: [6:0.50]
4270;
4271; BTVER2-LABEL: test_fst_fstp:
4272; BTVER2:       # %bb.0:
4273; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
4274; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
4275; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00]
4276; BTVER2-NEXT:    #APP
4277; BTVER2-NEXT:    fst %st(0) # sched: [1:0.50]
4278; BTVER2-NEXT:    fsts (%edx) # sched: [1:1.00]
4279; BTVER2-NEXT:    fstl (%ecx) # sched: [1:1.00]
4280; BTVER2-NEXT:    fstp %st(0) # sched: [1:0.50]
4281; BTVER2-NEXT:    fstpl (%edx) # sched: [1:1.00]
4282; BTVER2-NEXT:    fstpl (%ecx) # sched: [1:1.00]
4283; BTVER2-NEXT:    fstpt (%eax) # sched: [1:1.00]
4284; BTVER2-NEXT:    #NO_APP
4285; BTVER2-NEXT:    retl # sched: [4:1.00]
4286;
4287; ZNVER1-LABEL: test_fst_fstp:
4288; ZNVER1:       # %bb.0:
4289; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
4290; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
4291; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50]
4292; ZNVER1-NEXT:    #APP
4293; ZNVER1-NEXT:    fst %st(0) # sched: [5:0.50]
4294; ZNVER1-NEXT:    fsts (%edx) # sched: [1:0.50]
4295; ZNVER1-NEXT:    fstl (%ecx) # sched: [1:0.50]
4296; ZNVER1-NEXT:    fstp %st(0) # sched: [5:0.50]
4297; ZNVER1-NEXT:    fstpl (%edx) # sched: [1:0.50]
4298; ZNVER1-NEXT:    fstpl (%ecx) # sched: [1:0.50]
4299; ZNVER1-NEXT:    fstpt (%eax) # sched: [5:0.50]
4300; ZNVER1-NEXT:    #NO_APP
4301; ZNVER1-NEXT:    retl # sched: [1:0.50]
4302  tail call void asm sideeffect "fst %st(0) \0A\09 fsts $0 \0A\09 fstl $1 \0A\09 fstp %st(0) \0A\09 fstpl $0 \0A\09 fstpl $1 \0A\09 fstpt $2", "*m,*m,*m"(i16* %a0, i32* %a1, i64 *%a2) nounwind
4303  ret void
4304}
4305
4306define void @test_fstcw_fstenv_fstsw(i8* %a0) optsize {
4307; GENERIC-LABEL: test_fstcw_fstenv_fstsw:
4308; GENERIC:       # %bb.0:
4309; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4310; GENERIC-NEXT:    #APP
4311; GENERIC-NEXT:    wait
4312; GENERIC-NEXT:    fnstcw (%eax)
4313; GENERIC-NEXT:    wait
4314; GENERIC-NEXT:    fnstenv (%eax)
4315; GENERIC-NEXT:    wait
4316; GENERIC-NEXT:    fnstsw (%eax)
4317; GENERIC-NEXT:    #NO_APP
4318; GENERIC-NEXT:    retl
4319;
4320; ATOM-LABEL: test_fstcw_fstenv_fstsw:
4321; ATOM:       # %bb.0:
4322; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4323; ATOM-NEXT:    #APP
4324; ATOM-NEXT:    wait # sched: [1:0.50]
4325; ATOM-NEXT:    fnstcw (%eax) # sched: [8:4.00]
4326; ATOM-NEXT:    wait # sched: [1:0.50]
4327; ATOM-NEXT:    fnstenv (%eax) # sched: [100:0.50]
4328; ATOM-NEXT:    wait # sched: [1:0.50]
4329; ATOM-NEXT:    fnstsw (%eax) # sched: [100:0.50]
4330; ATOM-NEXT:    #NO_APP
4331; ATOM-NEXT:    retl # sched: [79:39.50]
4332;
4333; SLM-LABEL: test_fstcw_fstenv_fstsw:
4334; SLM:       # %bb.0:
4335; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4336; SLM-NEXT:    #APP
4337; SLM-NEXT:    wait # sched: [100:1.00]
4338; SLM-NEXT:    fnstcw (%eax) # sched: [1:0.50]
4339; SLM-NEXT:    wait # sched: [100:1.00]
4340; SLM-NEXT:    fnstenv (%eax) # sched: [100:1.00]
4341; SLM-NEXT:    wait # sched: [100:1.00]
4342; SLM-NEXT:    fnstsw (%eax) # sched: [100:1.00]
4343; SLM-NEXT:    #NO_APP
4344; SLM-NEXT:    retl # sched: [4:1.00]
4345;
4346; SANDY-LABEL: test_fstcw_fstenv_fstsw:
4347; SANDY:       # %bb.0:
4348; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4349; SANDY-NEXT:    #APP
4350; SANDY-NEXT:    wait # sched: [100:0.33]
4351; SANDY-NEXT:    fnstcw (%eax) # sched: [7:1.00]
4352; SANDY-NEXT:    wait # sched: [100:0.33]
4353; SANDY-NEXT:    fnstenv (%eax) # sched: [100:0.33]
4354; SANDY-NEXT:    wait # sched: [100:0.33]
4355; SANDY-NEXT:    fnstsw (%eax) # sched: [7:1.00]
4356; SANDY-NEXT:    #NO_APP
4357; SANDY-NEXT:    retl # sched: [6:1.00]
4358;
4359; HASWELL-LABEL: test_fstcw_fstenv_fstsw:
4360; HASWELL:       # %bb.0:
4361; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4362; HASWELL-NEXT:    #APP
4363; HASWELL-NEXT:    wait # sched: [2:0.50]
4364; HASWELL-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4365; HASWELL-NEXT:    wait # sched: [2:0.50]
4366; HASWELL-NEXT:    fnstenv (%eax) # sched: [115:19.50]
4367; HASWELL-NEXT:    wait # sched: [2:0.50]
4368; HASWELL-NEXT:    fnstsw (%eax) # sched: [4:1.00]
4369; HASWELL-NEXT:    #NO_APP
4370; HASWELL-NEXT:    retl # sched: [7:1.00]
4371;
4372; BROADWELL-LABEL: test_fstcw_fstenv_fstsw:
4373; BROADWELL:       # %bb.0:
4374; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4375; BROADWELL-NEXT:    #APP
4376; BROADWELL-NEXT:    wait # sched: [2:0.50]
4377; BROADWELL-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4378; BROADWELL-NEXT:    wait # sched: [2:0.50]
4379; BROADWELL-NEXT:    fnstenv (%eax) # sched: [115:19.50]
4380; BROADWELL-NEXT:    wait # sched: [2:0.50]
4381; BROADWELL-NEXT:    fnstsw (%eax) # sched: [4:1.00]
4382; BROADWELL-NEXT:    #NO_APP
4383; BROADWELL-NEXT:    retl # sched: [6:0.50]
4384;
4385; SKYLAKE-LABEL: test_fstcw_fstenv_fstsw:
4386; SKYLAKE:       # %bb.0:
4387; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4388; SKYLAKE-NEXT:    #APP
4389; SKYLAKE-NEXT:    wait # sched: [2:0.50]
4390; SKYLAKE-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4391; SKYLAKE-NEXT:    wait # sched: [2:0.50]
4392; SKYLAKE-NEXT:    fnstenv (%eax) # sched: [106:19.50]
4393; SKYLAKE-NEXT:    wait # sched: [2:0.50]
4394; SKYLAKE-NEXT:    fnstsw (%eax) # sched: [3:1.00]
4395; SKYLAKE-NEXT:    #NO_APP
4396; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4397;
4398; SKX-LABEL: test_fstcw_fstenv_fstsw:
4399; SKX:       # %bb.0:
4400; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4401; SKX-NEXT:    #APP
4402; SKX-NEXT:    wait # sched: [2:0.50]
4403; SKX-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4404; SKX-NEXT:    wait # sched: [2:0.50]
4405; SKX-NEXT:    fnstenv (%eax) # sched: [106:19.50]
4406; SKX-NEXT:    wait # sched: [2:0.50]
4407; SKX-NEXT:    fnstsw (%eax) # sched: [3:1.00]
4408; SKX-NEXT:    #NO_APP
4409; SKX-NEXT:    retl # sched: [6:0.50]
4410;
4411; BTVER2-LABEL: test_fstcw_fstenv_fstsw:
4412; BTVER2:       # %bb.0:
4413; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
4414; BTVER2-NEXT:    #APP
4415; BTVER2-NEXT:    wait # sched: [100:0.50]
4416; BTVER2-NEXT:    fnstcw (%eax) # sched: [1:0.50]
4417; BTVER2-NEXT:    wait # sched: [100:0.50]
4418; BTVER2-NEXT:    fnstenv (%eax) # sched: [100:0.50]
4419; BTVER2-NEXT:    wait # sched: [100:0.50]
4420; BTVER2-NEXT:    fnstsw (%eax) # sched: [100:0.50]
4421; BTVER2-NEXT:    #NO_APP
4422; BTVER2-NEXT:    retl # sched: [4:1.00]
4423;
4424; ZNVER1-LABEL: test_fstcw_fstenv_fstsw:
4425; ZNVER1:       # %bb.0:
4426; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
4427; ZNVER1-NEXT:    #APP
4428; ZNVER1-NEXT:    wait # sched: [1:1.00]
4429; ZNVER1-NEXT:    fnstcw (%eax) # sched: [100:0.25]
4430; ZNVER1-NEXT:    wait # sched: [1:1.00]
4431; ZNVER1-NEXT:    fnstenv (%eax) # sched: [100:0.25]
4432; ZNVER1-NEXT:    wait # sched: [1:1.00]
4433; ZNVER1-NEXT:    fnstsw (%eax) # sched: [100:0.25]
4434; ZNVER1-NEXT:    #NO_APP
4435; ZNVER1-NEXT:    retl # sched: [1:0.50]
4436  tail call void asm sideeffect "fstcw $0 \0A\09 fstenv $0 \0A\09 fstsw $0", "*m"(i8* %a0) nounwind
4437  ret void
4438}
4439
4440define void @test_fnstcw_fnstenv_fnstsw(i8* %a0) optsize {
4441; GENERIC-LABEL: test_fnstcw_fnstenv_fnstsw:
4442; GENERIC:       # %bb.0:
4443; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4444; GENERIC-NEXT:    #APP
4445; GENERIC-NEXT:    fnstcw (%eax)
4446; GENERIC-NEXT:    fnstenv (%eax)
4447; GENERIC-NEXT:    fnstsw (%eax)
4448; GENERIC-NEXT:    #NO_APP
4449; GENERIC-NEXT:    retl
4450;
4451; ATOM-LABEL: test_fnstcw_fnstenv_fnstsw:
4452; ATOM:       # %bb.0:
4453; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4454; ATOM-NEXT:    #APP
4455; ATOM-NEXT:    fnstcw (%eax) # sched: [8:4.00]
4456; ATOM-NEXT:    fnstenv (%eax) # sched: [100:0.50]
4457; ATOM-NEXT:    fnstsw (%eax) # sched: [100:0.50]
4458; ATOM-NEXT:    #NO_APP
4459; ATOM-NEXT:    retl # sched: [79:39.50]
4460;
4461; SLM-LABEL: test_fnstcw_fnstenv_fnstsw:
4462; SLM:       # %bb.0:
4463; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4464; SLM-NEXT:    #APP
4465; SLM-NEXT:    fnstcw (%eax) # sched: [1:0.50]
4466; SLM-NEXT:    fnstenv (%eax) # sched: [100:1.00]
4467; SLM-NEXT:    fnstsw (%eax) # sched: [100:1.00]
4468; SLM-NEXT:    #NO_APP
4469; SLM-NEXT:    retl # sched: [4:1.00]
4470;
4471; SANDY-LABEL: test_fnstcw_fnstenv_fnstsw:
4472; SANDY:       # %bb.0:
4473; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4474; SANDY-NEXT:    #APP
4475; SANDY-NEXT:    fnstcw (%eax) # sched: [7:1.00]
4476; SANDY-NEXT:    fnstenv (%eax) # sched: [100:0.33]
4477; SANDY-NEXT:    fnstsw (%eax) # sched: [7:1.00]
4478; SANDY-NEXT:    #NO_APP
4479; SANDY-NEXT:    retl # sched: [6:1.00]
4480;
4481; HASWELL-LABEL: test_fnstcw_fnstenv_fnstsw:
4482; HASWELL:       # %bb.0:
4483; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4484; HASWELL-NEXT:    #APP
4485; HASWELL-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4486; HASWELL-NEXT:    fnstenv (%eax) # sched: [115:19.50]
4487; HASWELL-NEXT:    fnstsw (%eax) # sched: [4:1.00]
4488; HASWELL-NEXT:    #NO_APP
4489; HASWELL-NEXT:    retl # sched: [7:1.00]
4490;
4491; BROADWELL-LABEL: test_fnstcw_fnstenv_fnstsw:
4492; BROADWELL:       # %bb.0:
4493; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4494; BROADWELL-NEXT:    #APP
4495; BROADWELL-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4496; BROADWELL-NEXT:    fnstenv (%eax) # sched: [115:19.50]
4497; BROADWELL-NEXT:    fnstsw (%eax) # sched: [4:1.00]
4498; BROADWELL-NEXT:    #NO_APP
4499; BROADWELL-NEXT:    retl # sched: [6:0.50]
4500;
4501; SKYLAKE-LABEL: test_fnstcw_fnstenv_fnstsw:
4502; SKYLAKE:       # %bb.0:
4503; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4504; SKYLAKE-NEXT:    #APP
4505; SKYLAKE-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4506; SKYLAKE-NEXT:    fnstenv (%eax) # sched: [106:19.50]
4507; SKYLAKE-NEXT:    fnstsw (%eax) # sched: [3:1.00]
4508; SKYLAKE-NEXT:    #NO_APP
4509; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4510;
4511; SKX-LABEL: test_fnstcw_fnstenv_fnstsw:
4512; SKX:       # %bb.0:
4513; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4514; SKX-NEXT:    #APP
4515; SKX-NEXT:    fnstcw (%eax) # sched: [2:1.00]
4516; SKX-NEXT:    fnstenv (%eax) # sched: [106:19.50]
4517; SKX-NEXT:    fnstsw (%eax) # sched: [3:1.00]
4518; SKX-NEXT:    #NO_APP
4519; SKX-NEXT:    retl # sched: [6:0.50]
4520;
4521; BTVER2-LABEL: test_fnstcw_fnstenv_fnstsw:
4522; BTVER2:       # %bb.0:
4523; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
4524; BTVER2-NEXT:    #APP
4525; BTVER2-NEXT:    fnstcw (%eax) # sched: [1:0.50]
4526; BTVER2-NEXT:    fnstenv (%eax) # sched: [100:0.50]
4527; BTVER2-NEXT:    fnstsw (%eax) # sched: [100:0.50]
4528; BTVER2-NEXT:    #NO_APP
4529; BTVER2-NEXT:    retl # sched: [4:1.00]
4530;
4531; ZNVER1-LABEL: test_fnstcw_fnstenv_fnstsw:
4532; ZNVER1:       # %bb.0:
4533; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
4534; ZNVER1-NEXT:    #APP
4535; ZNVER1-NEXT:    fnstcw (%eax) # sched: [100:0.25]
4536; ZNVER1-NEXT:    fnstenv (%eax) # sched: [100:0.25]
4537; ZNVER1-NEXT:    fnstsw (%eax) # sched: [100:0.25]
4538; ZNVER1-NEXT:    #NO_APP
4539; ZNVER1-NEXT:    retl # sched: [1:0.50]
4540  tail call void asm sideeffect "fnstcw $0 \0A\09 fnstenv $0 \0A\09 fnstsw $0", "*m"(i8* %a0) nounwind
4541  ret void
4542}
4543
4544define void @test_fsub(float *%a0, double *%a1) optsize {
4545; GENERIC-LABEL: test_fsub:
4546; GENERIC:       # %bb.0:
4547; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4548; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4549; GENERIC-NEXT:    #APP
4550; GENERIC-NEXT:    fsub %st(0), %st(1)
4551; GENERIC-NEXT:    fsub %st(2)
4552; GENERIC-NEXT:    fsubs (%ecx)
4553; GENERIC-NEXT:    fsubl (%eax)
4554; GENERIC-NEXT:    #NO_APP
4555; GENERIC-NEXT:    retl
4556;
4557; ATOM-LABEL: test_fsub:
4558; ATOM:       # %bb.0:
4559; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4560; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
4561; ATOM-NEXT:    #APP
4562; ATOM-NEXT:    fsub %st(0), %st(1) # sched: [5:5.00]
4563; ATOM-NEXT:    fsub %st(2) # sched: [5:5.00]
4564; ATOM-NEXT:    fsubs (%ecx) # sched: [5:5.00]
4565; ATOM-NEXT:    fsubl (%eax) # sched: [5:5.00]
4566; ATOM-NEXT:    #NO_APP
4567; ATOM-NEXT:    retl # sched: [79:39.50]
4568;
4569; SLM-LABEL: test_fsub:
4570; SLM:       # %bb.0:
4571; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4572; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
4573; SLM-NEXT:    #APP
4574; SLM-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4575; SLM-NEXT:    fsub %st(2) # sched: [3:1.00]
4576; SLM-NEXT:    fsubs (%ecx) # sched: [6:1.00]
4577; SLM-NEXT:    fsubl (%eax) # sched: [6:1.00]
4578; SLM-NEXT:    #NO_APP
4579; SLM-NEXT:    retl # sched: [4:1.00]
4580;
4581; SANDY-LABEL: test_fsub:
4582; SANDY:       # %bb.0:
4583; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4584; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4585; SANDY-NEXT:    #APP
4586; SANDY-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4587; SANDY-NEXT:    fsub %st(2) # sched: [3:1.00]
4588; SANDY-NEXT:    fsubs (%ecx) # sched: [10:1.00]
4589; SANDY-NEXT:    fsubl (%eax) # sched: [10:1.00]
4590; SANDY-NEXT:    #NO_APP
4591; SANDY-NEXT:    retl # sched: [6:1.00]
4592;
4593; HASWELL-LABEL: test_fsub:
4594; HASWELL:       # %bb.0:
4595; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4596; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4597; HASWELL-NEXT:    #APP
4598; HASWELL-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4599; HASWELL-NEXT:    fsub %st(2) # sched: [3:1.00]
4600; HASWELL-NEXT:    fsubs (%ecx) # sched: [10:1.00]
4601; HASWELL-NEXT:    fsubl (%eax) # sched: [10:1.00]
4602; HASWELL-NEXT:    #NO_APP
4603; HASWELL-NEXT:    retl # sched: [7:1.00]
4604;
4605; BROADWELL-LABEL: test_fsub:
4606; BROADWELL:       # %bb.0:
4607; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4608; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4609; BROADWELL-NEXT:    #APP
4610; BROADWELL-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4611; BROADWELL-NEXT:    fsub %st(2) # sched: [3:1.00]
4612; BROADWELL-NEXT:    fsubs (%ecx) # sched: [9:1.00]
4613; BROADWELL-NEXT:    fsubl (%eax) # sched: [9:1.00]
4614; BROADWELL-NEXT:    #NO_APP
4615; BROADWELL-NEXT:    retl # sched: [6:0.50]
4616;
4617; SKYLAKE-LABEL: test_fsub:
4618; SKYLAKE:       # %bb.0:
4619; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4620; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4621; SKYLAKE-NEXT:    #APP
4622; SKYLAKE-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4623; SKYLAKE-NEXT:    fsub %st(2) # sched: [3:1.00]
4624; SKYLAKE-NEXT:    fsubs (%ecx) # sched: [10:1.00]
4625; SKYLAKE-NEXT:    fsubl (%eax) # sched: [10:1.00]
4626; SKYLAKE-NEXT:    #NO_APP
4627; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4628;
4629; SKX-LABEL: test_fsub:
4630; SKX:       # %bb.0:
4631; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4632; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4633; SKX-NEXT:    #APP
4634; SKX-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4635; SKX-NEXT:    fsub %st(2) # sched: [3:1.00]
4636; SKX-NEXT:    fsubs (%ecx) # sched: [10:1.00]
4637; SKX-NEXT:    fsubl (%eax) # sched: [10:1.00]
4638; SKX-NEXT:    #NO_APP
4639; SKX-NEXT:    retl # sched: [6:0.50]
4640;
4641; BTVER2-LABEL: test_fsub:
4642; BTVER2:       # %bb.0:
4643; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
4644; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
4645; BTVER2-NEXT:    #APP
4646; BTVER2-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4647; BTVER2-NEXT:    fsub %st(2) # sched: [3:1.00]
4648; BTVER2-NEXT:    fsubs (%ecx) # sched: [8:1.00]
4649; BTVER2-NEXT:    fsubl (%eax) # sched: [8:1.00]
4650; BTVER2-NEXT:    #NO_APP
4651; BTVER2-NEXT:    retl # sched: [4:1.00]
4652;
4653; ZNVER1-LABEL: test_fsub:
4654; ZNVER1:       # %bb.0:
4655; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
4656; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
4657; ZNVER1-NEXT:    #APP
4658; ZNVER1-NEXT:    fsub %st(0), %st(1) # sched: [3:1.00]
4659; ZNVER1-NEXT:    fsub %st(2) # sched: [3:1.00]
4660; ZNVER1-NEXT:    fsubs (%ecx) # sched: [10:1.00]
4661; ZNVER1-NEXT:    fsubl (%eax) # sched: [10:1.00]
4662; ZNVER1-NEXT:    #NO_APP
4663; ZNVER1-NEXT:    retl # sched: [1:0.50]
4664  tail call void asm sideeffect "fsub %st(0), %st(1) \0A\09 fsub %st(2), %st(0) \0A\09 fsubs $0 \0A\09 fsubl $1", "*m,*m"(float *%a0, double *%a1) nounwind
4665  ret void
4666}
4667
4668define void @test_fsubp_fisub(i16 *%a0, i32 *%a1) optsize {
4669; GENERIC-LABEL: test_fsubp_fisub:
4670; GENERIC:       # %bb.0:
4671; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4672; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4673; GENERIC-NEXT:    #APP
4674; GENERIC-NEXT:    fsubp %st(1)
4675; GENERIC-NEXT:    fsubp %st(2)
4676; GENERIC-NEXT:    fisubs (%ecx)
4677; GENERIC-NEXT:    fisubl (%eax)
4678; GENERIC-NEXT:    #NO_APP
4679; GENERIC-NEXT:    retl
4680;
4681; ATOM-LABEL: test_fsubp_fisub:
4682; ATOM:       # %bb.0:
4683; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4684; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
4685; ATOM-NEXT:    #APP
4686; ATOM-NEXT:    fsubp %st(1) # sched: [5:5.00]
4687; ATOM-NEXT:    fsubp %st(2) # sched: [5:5.00]
4688; ATOM-NEXT:    fisubs (%ecx) # sched: [5:5.00]
4689; ATOM-NEXT:    fisubl (%eax) # sched: [5:5.00]
4690; ATOM-NEXT:    #NO_APP
4691; ATOM-NEXT:    retl # sched: [79:39.50]
4692;
4693; SLM-LABEL: test_fsubp_fisub:
4694; SLM:       # %bb.0:
4695; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4696; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
4697; SLM-NEXT:    #APP
4698; SLM-NEXT:    fsubp %st(1) # sched: [3:1.00]
4699; SLM-NEXT:    fsubp %st(2) # sched: [3:1.00]
4700; SLM-NEXT:    fisubs (%ecx) # sched: [6:1.00]
4701; SLM-NEXT:    fisubl (%eax) # sched: [6:1.00]
4702; SLM-NEXT:    #NO_APP
4703; SLM-NEXT:    retl # sched: [4:1.00]
4704;
4705; SANDY-LABEL: test_fsubp_fisub:
4706; SANDY:       # %bb.0:
4707; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4708; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4709; SANDY-NEXT:    #APP
4710; SANDY-NEXT:    fsubp %st(1) # sched: [3:1.00]
4711; SANDY-NEXT:    fsubp %st(2) # sched: [3:1.00]
4712; SANDY-NEXT:    fisubs (%ecx) # sched: [13:2.00]
4713; SANDY-NEXT:    fisubl (%eax) # sched: [13:2.00]
4714; SANDY-NEXT:    #NO_APP
4715; SANDY-NEXT:    retl # sched: [6:1.00]
4716;
4717; HASWELL-LABEL: test_fsubp_fisub:
4718; HASWELL:       # %bb.0:
4719; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4720; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4721; HASWELL-NEXT:    #APP
4722; HASWELL-NEXT:    fsubp %st(1) # sched: [3:1.00]
4723; HASWELL-NEXT:    fsubp %st(2) # sched: [3:1.00]
4724; HASWELL-NEXT:    fisubs (%ecx) # sched: [13:2.00]
4725; HASWELL-NEXT:    fisubl (%eax) # sched: [13:2.00]
4726; HASWELL-NEXT:    #NO_APP
4727; HASWELL-NEXT:    retl # sched: [7:1.00]
4728;
4729; BROADWELL-LABEL: test_fsubp_fisub:
4730; BROADWELL:       # %bb.0:
4731; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4732; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4733; BROADWELL-NEXT:    #APP
4734; BROADWELL-NEXT:    fsubp %st(1) # sched: [3:1.00]
4735; BROADWELL-NEXT:    fsubp %st(2) # sched: [3:1.00]
4736; BROADWELL-NEXT:    fisubs (%ecx) # sched: [12:2.00]
4737; BROADWELL-NEXT:    fisubl (%eax) # sched: [12:2.00]
4738; BROADWELL-NEXT:    #NO_APP
4739; BROADWELL-NEXT:    retl # sched: [6:0.50]
4740;
4741; SKYLAKE-LABEL: test_fsubp_fisub:
4742; SKYLAKE:       # %bb.0:
4743; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4744; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4745; SKYLAKE-NEXT:    #APP
4746; SKYLAKE-NEXT:    fsubp %st(1) # sched: [3:1.00]
4747; SKYLAKE-NEXT:    fsubp %st(2) # sched: [3:1.00]
4748; SKYLAKE-NEXT:    fisubs (%ecx) # sched: [13:2.00]
4749; SKYLAKE-NEXT:    fisubl (%eax) # sched: [13:2.00]
4750; SKYLAKE-NEXT:    #NO_APP
4751; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4752;
4753; SKX-LABEL: test_fsubp_fisub:
4754; SKX:       # %bb.0:
4755; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4756; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4757; SKX-NEXT:    #APP
4758; SKX-NEXT:    fsubp %st(1) # sched: [3:1.00]
4759; SKX-NEXT:    fsubp %st(2) # sched: [3:1.00]
4760; SKX-NEXT:    fisubs (%ecx) # sched: [13:2.00]
4761; SKX-NEXT:    fisubl (%eax) # sched: [13:2.00]
4762; SKX-NEXT:    #NO_APP
4763; SKX-NEXT:    retl # sched: [6:0.50]
4764;
4765; BTVER2-LABEL: test_fsubp_fisub:
4766; BTVER2:       # %bb.0:
4767; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
4768; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
4769; BTVER2-NEXT:    #APP
4770; BTVER2-NEXT:    fsubp %st(1) # sched: [3:1.00]
4771; BTVER2-NEXT:    fsubp %st(2) # sched: [3:1.00]
4772; BTVER2-NEXT:    fisubs (%ecx) # sched: [8:1.00]
4773; BTVER2-NEXT:    fisubl (%eax) # sched: [8:1.00]
4774; BTVER2-NEXT:    #NO_APP
4775; BTVER2-NEXT:    retl # sched: [4:1.00]
4776;
4777; ZNVER1-LABEL: test_fsubp_fisub:
4778; ZNVER1:       # %bb.0:
4779; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
4780; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
4781; ZNVER1-NEXT:    #APP
4782; ZNVER1-NEXT:    fsubp %st(1) # sched: [3:1.00]
4783; ZNVER1-NEXT:    fsubp %st(2) # sched: [3:1.00]
4784; ZNVER1-NEXT:    fisubs (%ecx) # sched: [10:1.00]
4785; ZNVER1-NEXT:    fisubl (%eax) # sched: [10:1.00]
4786; ZNVER1-NEXT:    #NO_APP
4787; ZNVER1-NEXT:    retl # sched: [1:0.50]
4788  tail call void asm sideeffect "fsubp \0A\09 fsubp %st(2), %st(0) \0A\09 fisubs $0 \0A\09 fisubl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
4789  ret void
4790}
4791
4792define void @test_fsubr(float *%a0, double *%a1) optsize {
4793; GENERIC-LABEL: test_fsubr:
4794; GENERIC:       # %bb.0:
4795; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4796; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4797; GENERIC-NEXT:    #APP
4798; GENERIC-NEXT:    fsubr %st(0), %st(1)
4799; GENERIC-NEXT:    fsubr %st(2)
4800; GENERIC-NEXT:    fsubrs (%ecx)
4801; GENERIC-NEXT:    fsubrl (%eax)
4802; GENERIC-NEXT:    #NO_APP
4803; GENERIC-NEXT:    retl
4804;
4805; ATOM-LABEL: test_fsubr:
4806; ATOM:       # %bb.0:
4807; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4808; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
4809; ATOM-NEXT:    #APP
4810; ATOM-NEXT:    fsubr %st(0), %st(1) # sched: [5:5.00]
4811; ATOM-NEXT:    fsubr %st(2) # sched: [5:5.00]
4812; ATOM-NEXT:    fsubrs (%ecx) # sched: [5:5.00]
4813; ATOM-NEXT:    fsubrl (%eax) # sched: [5:5.00]
4814; ATOM-NEXT:    #NO_APP
4815; ATOM-NEXT:    retl # sched: [79:39.50]
4816;
4817; SLM-LABEL: test_fsubr:
4818; SLM:       # %bb.0:
4819; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4820; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
4821; SLM-NEXT:    #APP
4822; SLM-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4823; SLM-NEXT:    fsubr %st(2) # sched: [3:1.00]
4824; SLM-NEXT:    fsubrs (%ecx) # sched: [6:1.00]
4825; SLM-NEXT:    fsubrl (%eax) # sched: [6:1.00]
4826; SLM-NEXT:    #NO_APP
4827; SLM-NEXT:    retl # sched: [4:1.00]
4828;
4829; SANDY-LABEL: test_fsubr:
4830; SANDY:       # %bb.0:
4831; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4832; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4833; SANDY-NEXT:    #APP
4834; SANDY-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4835; SANDY-NEXT:    fsubr %st(2) # sched: [3:1.00]
4836; SANDY-NEXT:    fsubrs (%ecx) # sched: [10:1.00]
4837; SANDY-NEXT:    fsubrl (%eax) # sched: [10:1.00]
4838; SANDY-NEXT:    #NO_APP
4839; SANDY-NEXT:    retl # sched: [6:1.00]
4840;
4841; HASWELL-LABEL: test_fsubr:
4842; HASWELL:       # %bb.0:
4843; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4844; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4845; HASWELL-NEXT:    #APP
4846; HASWELL-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4847; HASWELL-NEXT:    fsubr %st(2) # sched: [3:1.00]
4848; HASWELL-NEXT:    fsubrs (%ecx) # sched: [10:1.00]
4849; HASWELL-NEXT:    fsubrl (%eax) # sched: [10:1.00]
4850; HASWELL-NEXT:    #NO_APP
4851; HASWELL-NEXT:    retl # sched: [7:1.00]
4852;
4853; BROADWELL-LABEL: test_fsubr:
4854; BROADWELL:       # %bb.0:
4855; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4856; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4857; BROADWELL-NEXT:    #APP
4858; BROADWELL-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4859; BROADWELL-NEXT:    fsubr %st(2) # sched: [3:1.00]
4860; BROADWELL-NEXT:    fsubrs (%ecx) # sched: [9:1.00]
4861; BROADWELL-NEXT:    fsubrl (%eax) # sched: [9:1.00]
4862; BROADWELL-NEXT:    #NO_APP
4863; BROADWELL-NEXT:    retl # sched: [6:0.50]
4864;
4865; SKYLAKE-LABEL: test_fsubr:
4866; SKYLAKE:       # %bb.0:
4867; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4868; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4869; SKYLAKE-NEXT:    #APP
4870; SKYLAKE-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4871; SKYLAKE-NEXT:    fsubr %st(2) # sched: [3:1.00]
4872; SKYLAKE-NEXT:    fsubrs (%ecx) # sched: [10:1.00]
4873; SKYLAKE-NEXT:    fsubrl (%eax) # sched: [10:1.00]
4874; SKYLAKE-NEXT:    #NO_APP
4875; SKYLAKE-NEXT:    retl # sched: [6:0.50]
4876;
4877; SKX-LABEL: test_fsubr:
4878; SKX:       # %bb.0:
4879; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4880; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4881; SKX-NEXT:    #APP
4882; SKX-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4883; SKX-NEXT:    fsubr %st(2) # sched: [3:1.00]
4884; SKX-NEXT:    fsubrs (%ecx) # sched: [10:1.00]
4885; SKX-NEXT:    fsubrl (%eax) # sched: [10:1.00]
4886; SKX-NEXT:    #NO_APP
4887; SKX-NEXT:    retl # sched: [6:0.50]
4888;
4889; BTVER2-LABEL: test_fsubr:
4890; BTVER2:       # %bb.0:
4891; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
4892; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
4893; BTVER2-NEXT:    #APP
4894; BTVER2-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4895; BTVER2-NEXT:    fsubr %st(2) # sched: [3:1.00]
4896; BTVER2-NEXT:    fsubrs (%ecx) # sched: [8:1.00]
4897; BTVER2-NEXT:    fsubrl (%eax) # sched: [8:1.00]
4898; BTVER2-NEXT:    #NO_APP
4899; BTVER2-NEXT:    retl # sched: [4:1.00]
4900;
4901; ZNVER1-LABEL: test_fsubr:
4902; ZNVER1:       # %bb.0:
4903; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
4904; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
4905; ZNVER1-NEXT:    #APP
4906; ZNVER1-NEXT:    fsubr %st(0), %st(1) # sched: [3:1.00]
4907; ZNVER1-NEXT:    fsubr %st(2) # sched: [3:1.00]
4908; ZNVER1-NEXT:    fsubrs (%ecx) # sched: [10:1.00]
4909; ZNVER1-NEXT:    fsubrl (%eax) # sched: [10:1.00]
4910; ZNVER1-NEXT:    #NO_APP
4911; ZNVER1-NEXT:    retl # sched: [1:0.50]
4912  tail call void asm sideeffect "fsubr %st(0), %st(1) \0A\09 fsubr %st(2), %st(0) \0A\09 fsubrs $0 \0A\09 fsubrl $1", "*m,*m"(float *%a0, double *%a1) nounwind
4913  ret void
4914}
4915
4916define void @test_fsubrp_fisubr(i16 *%a0, i32 *%a1) optsize {
4917; GENERIC-LABEL: test_fsubrp_fisubr:
4918; GENERIC:       # %bb.0:
4919; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
4920; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4921; GENERIC-NEXT:    #APP
4922; GENERIC-NEXT:    fsubrp %st(1)
4923; GENERIC-NEXT:    fsubrp %st(2)
4924; GENERIC-NEXT:    fisubrs (%ecx)
4925; GENERIC-NEXT:    fisubrl (%eax)
4926; GENERIC-NEXT:    #NO_APP
4927; GENERIC-NEXT:    retl
4928;
4929; ATOM-LABEL: test_fsubrp_fisubr:
4930; ATOM:       # %bb.0:
4931; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
4932; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
4933; ATOM-NEXT:    #APP
4934; ATOM-NEXT:    fsubrp %st(1) # sched: [5:5.00]
4935; ATOM-NEXT:    fsubrp %st(2) # sched: [5:5.00]
4936; ATOM-NEXT:    fisubrs (%ecx) # sched: [5:5.00]
4937; ATOM-NEXT:    fisubrl (%eax) # sched: [5:5.00]
4938; ATOM-NEXT:    #NO_APP
4939; ATOM-NEXT:    retl # sched: [79:39.50]
4940;
4941; SLM-LABEL: test_fsubrp_fisubr:
4942; SLM:       # %bb.0:
4943; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
4944; SLM-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
4945; SLM-NEXT:    #APP
4946; SLM-NEXT:    fsubrp %st(1) # sched: [3:1.00]
4947; SLM-NEXT:    fsubrp %st(2) # sched: [3:1.00]
4948; SLM-NEXT:    fisubrs (%ecx) # sched: [6:1.00]
4949; SLM-NEXT:    fisubrl (%eax) # sched: [6:1.00]
4950; SLM-NEXT:    #NO_APP
4951; SLM-NEXT:    retl # sched: [4:1.00]
4952;
4953; SANDY-LABEL: test_fsubrp_fisubr:
4954; SANDY:       # %bb.0:
4955; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4956; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4957; SANDY-NEXT:    #APP
4958; SANDY-NEXT:    fsubrp %st(1) # sched: [3:1.00]
4959; SANDY-NEXT:    fsubrp %st(2) # sched: [3:1.00]
4960; SANDY-NEXT:    fisubrs (%ecx) # sched: [13:2.00]
4961; SANDY-NEXT:    fisubrl (%eax) # sched: [13:2.00]
4962; SANDY-NEXT:    #NO_APP
4963; SANDY-NEXT:    retl # sched: [6:1.00]
4964;
4965; HASWELL-LABEL: test_fsubrp_fisubr:
4966; HASWELL:       # %bb.0:
4967; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4968; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4969; HASWELL-NEXT:    #APP
4970; HASWELL-NEXT:    fsubrp %st(1) # sched: [3:1.00]
4971; HASWELL-NEXT:    fsubrp %st(2) # sched: [3:1.00]
4972; HASWELL-NEXT:    fisubrs (%ecx) # sched: [13:2.00]
4973; HASWELL-NEXT:    fisubrl (%eax) # sched: [13:2.00]
4974; HASWELL-NEXT:    #NO_APP
4975; HASWELL-NEXT:    retl # sched: [7:1.00]
4976;
4977; BROADWELL-LABEL: test_fsubrp_fisubr:
4978; BROADWELL:       # %bb.0:
4979; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4980; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4981; BROADWELL-NEXT:    #APP
4982; BROADWELL-NEXT:    fsubrp %st(1) # sched: [3:1.00]
4983; BROADWELL-NEXT:    fsubrp %st(2) # sched: [3:1.00]
4984; BROADWELL-NEXT:    fisubrs (%ecx) # sched: [12:2.00]
4985; BROADWELL-NEXT:    fisubrl (%eax) # sched: [12:2.00]
4986; BROADWELL-NEXT:    #NO_APP
4987; BROADWELL-NEXT:    retl # sched: [6:0.50]
4988;
4989; SKYLAKE-LABEL: test_fsubrp_fisubr:
4990; SKYLAKE:       # %bb.0:
4991; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
4992; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
4993; SKYLAKE-NEXT:    #APP
4994; SKYLAKE-NEXT:    fsubrp %st(1) # sched: [3:1.00]
4995; SKYLAKE-NEXT:    fsubrp %st(2) # sched: [3:1.00]
4996; SKYLAKE-NEXT:    fisubrs (%ecx) # sched: [13:2.00]
4997; SKYLAKE-NEXT:    fisubrl (%eax) # sched: [13:2.00]
4998; SKYLAKE-NEXT:    #NO_APP
4999; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5000;
5001; SKX-LABEL: test_fsubrp_fisubr:
5002; SKX:       # %bb.0:
5003; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
5004; SKX-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
5005; SKX-NEXT:    #APP
5006; SKX-NEXT:    fsubrp %st(1) # sched: [3:1.00]
5007; SKX-NEXT:    fsubrp %st(2) # sched: [3:1.00]
5008; SKX-NEXT:    fisubrs (%ecx) # sched: [13:2.00]
5009; SKX-NEXT:    fisubrl (%eax) # sched: [13:2.00]
5010; SKX-NEXT:    #NO_APP
5011; SKX-NEXT:    retl # sched: [6:0.50]
5012;
5013; BTVER2-LABEL: test_fsubrp_fisubr:
5014; BTVER2:       # %bb.0:
5015; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
5016; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
5017; BTVER2-NEXT:    #APP
5018; BTVER2-NEXT:    fsubrp %st(1) # sched: [3:1.00]
5019; BTVER2-NEXT:    fsubrp %st(2) # sched: [3:1.00]
5020; BTVER2-NEXT:    fisubrs (%ecx) # sched: [8:1.00]
5021; BTVER2-NEXT:    fisubrl (%eax) # sched: [8:1.00]
5022; BTVER2-NEXT:    #NO_APP
5023; BTVER2-NEXT:    retl # sched: [4:1.00]
5024;
5025; ZNVER1-LABEL: test_fsubrp_fisubr:
5026; ZNVER1:       # %bb.0:
5027; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
5028; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
5029; ZNVER1-NEXT:    #APP
5030; ZNVER1-NEXT:    fsubrp %st(1) # sched: [3:1.00]
5031; ZNVER1-NEXT:    fsubrp %st(2) # sched: [3:1.00]
5032; ZNVER1-NEXT:    fisubrs (%ecx) # sched: [10:1.00]
5033; ZNVER1-NEXT:    fisubrl (%eax) # sched: [10:1.00]
5034; ZNVER1-NEXT:    #NO_APP
5035; ZNVER1-NEXT:    retl # sched: [1:0.50]
5036  tail call void asm sideeffect "fsubrp \0A\09 fsubrp %st(2), %st(0) \0A\09 fisubrs $0 \0A\09 fisubrl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind
5037  ret void
5038}
5039
5040define void @test_ftst() optsize {
5041; GENERIC-LABEL: test_ftst:
5042; GENERIC:       # %bb.0:
5043; GENERIC-NEXT:    #APP
5044; GENERIC-NEXT:    ftst
5045; GENERIC-NEXT:    #NO_APP
5046; GENERIC-NEXT:    retl
5047;
5048; ATOM-LABEL: test_ftst:
5049; ATOM:       # %bb.0:
5050; ATOM-NEXT:    #APP
5051; ATOM-NEXT:    ftst # sched: [9:4.50]
5052; ATOM-NEXT:    #NO_APP
5053; ATOM-NEXT:    retl # sched: [79:39.50]
5054;
5055; SLM-LABEL: test_ftst:
5056; SLM:       # %bb.0:
5057; SLM-NEXT:    #APP
5058; SLM-NEXT:    ftst # sched: [3:1.00]
5059; SLM-NEXT:    #NO_APP
5060; SLM-NEXT:    retl # sched: [4:1.00]
5061;
5062; SANDY-LABEL: test_ftst:
5063; SANDY:       # %bb.0:
5064; SANDY-NEXT:    #APP
5065; SANDY-NEXT:    ftst # sched: [3:1.00]
5066; SANDY-NEXT:    #NO_APP
5067; SANDY-NEXT:    retl # sched: [6:1.00]
5068;
5069; HASWELL-LABEL: test_ftst:
5070; HASWELL:       # %bb.0:
5071; HASWELL-NEXT:    #APP
5072; HASWELL-NEXT:    ftst # sched: [1:1.00]
5073; HASWELL-NEXT:    #NO_APP
5074; HASWELL-NEXT:    retl # sched: [7:1.00]
5075;
5076; BROADWELL-LABEL: test_ftst:
5077; BROADWELL:       # %bb.0:
5078; BROADWELL-NEXT:    #APP
5079; BROADWELL-NEXT:    ftst # sched: [3:1.00]
5080; BROADWELL-NEXT:    #NO_APP
5081; BROADWELL-NEXT:    retl # sched: [6:0.50]
5082;
5083; SKYLAKE-LABEL: test_ftst:
5084; SKYLAKE:       # %bb.0:
5085; SKYLAKE-NEXT:    #APP
5086; SKYLAKE-NEXT:    ftst # sched: [2:1.00]
5087; SKYLAKE-NEXT:    #NO_APP
5088; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5089;
5090; SKX-LABEL: test_ftst:
5091; SKX:       # %bb.0:
5092; SKX-NEXT:    #APP
5093; SKX-NEXT:    ftst # sched: [2:1.00]
5094; SKX-NEXT:    #NO_APP
5095; SKX-NEXT:    retl # sched: [6:0.50]
5096;
5097; BTVER2-LABEL: test_ftst:
5098; BTVER2:       # %bb.0:
5099; BTVER2-NEXT:    #APP
5100; BTVER2-NEXT:    ftst # sched: [3:1.00]
5101; BTVER2-NEXT:    #NO_APP
5102; BTVER2-NEXT:    retl # sched: [4:1.00]
5103;
5104; ZNVER1-LABEL: test_ftst:
5105; ZNVER1:       # %bb.0:
5106; ZNVER1-NEXT:    #APP
5107; ZNVER1-NEXT:    ftst # sched: [1:1.00]
5108; ZNVER1-NEXT:    #NO_APP
5109; ZNVER1-NEXT:    retl # sched: [1:0.50]
5110  tail call void asm sideeffect "ftst", ""() nounwind
5111  ret void
5112}
5113
5114define void @test_fucom_fucomp_fucompp() optsize {
5115; GENERIC-LABEL: test_fucom_fucomp_fucompp:
5116; GENERIC:       # %bb.0:
5117; GENERIC-NEXT:    #APP
5118; GENERIC-NEXT:    fucom %st(1)
5119; GENERIC-NEXT:    fucom %st(3)
5120; GENERIC-NEXT:    fucomp %st(1)
5121; GENERIC-NEXT:    fucomp %st(3)
5122; GENERIC-NEXT:    fucompp
5123; GENERIC-NEXT:    #NO_APP
5124; GENERIC-NEXT:    retl
5125;
5126; ATOM-LABEL: test_fucom_fucomp_fucompp:
5127; ATOM:       # %bb.0:
5128; ATOM-NEXT:    #APP
5129; ATOM-NEXT:    fucom %st(1) # sched: [1:1.00]
5130; ATOM-NEXT:    fucom %st(3) # sched: [1:1.00]
5131; ATOM-NEXT:    fucomp %st(1) # sched: [1:1.00]
5132; ATOM-NEXT:    fucomp %st(3) # sched: [1:1.00]
5133; ATOM-NEXT:    fucompp # sched: [1:1.00]
5134; ATOM-NEXT:    #NO_APP
5135; ATOM-NEXT:    retl # sched: [79:39.50]
5136;
5137; SLM-LABEL: test_fucom_fucomp_fucompp:
5138; SLM:       # %bb.0:
5139; SLM-NEXT:    #APP
5140; SLM-NEXT:    fucom %st(1) # sched: [3:1.00]
5141; SLM-NEXT:    fucom %st(3) # sched: [3:1.00]
5142; SLM-NEXT:    fucomp %st(1) # sched: [3:1.00]
5143; SLM-NEXT:    fucomp %st(3) # sched: [3:1.00]
5144; SLM-NEXT:    fucompp # sched: [3:1.00]
5145; SLM-NEXT:    #NO_APP
5146; SLM-NEXT:    retl # sched: [4:1.00]
5147;
5148; SANDY-LABEL: test_fucom_fucomp_fucompp:
5149; SANDY:       # %bb.0:
5150; SANDY-NEXT:    #APP
5151; SANDY-NEXT:    fucom %st(1) # sched: [1:1.00]
5152; SANDY-NEXT:    fucom %st(3) # sched: [1:1.00]
5153; SANDY-NEXT:    fucomp %st(1) # sched: [1:1.00]
5154; SANDY-NEXT:    fucomp %st(3) # sched: [1:1.00]
5155; SANDY-NEXT:    fucompp # sched: [3:1.00]
5156; SANDY-NEXT:    #NO_APP
5157; SANDY-NEXT:    retl # sched: [6:1.00]
5158;
5159; HASWELL-LABEL: test_fucom_fucomp_fucompp:
5160; HASWELL:       # %bb.0:
5161; HASWELL-NEXT:    #APP
5162; HASWELL-NEXT:    fucom %st(1) # sched: [1:1.00]
5163; HASWELL-NEXT:    fucom %st(3) # sched: [1:1.00]
5164; HASWELL-NEXT:    fucomp %st(1) # sched: [1:1.00]
5165; HASWELL-NEXT:    fucomp %st(3) # sched: [1:1.00]
5166; HASWELL-NEXT:    fucompp # sched: [1:0.50]
5167; HASWELL-NEXT:    #NO_APP
5168; HASWELL-NEXT:    retl # sched: [7:1.00]
5169;
5170; BROADWELL-LABEL: test_fucom_fucomp_fucompp:
5171; BROADWELL:       # %bb.0:
5172; BROADWELL-NEXT:    #APP
5173; BROADWELL-NEXT:    fucom %st(1) # sched: [1:1.00]
5174; BROADWELL-NEXT:    fucom %st(3) # sched: [1:1.00]
5175; BROADWELL-NEXT:    fucomp %st(1) # sched: [1:1.00]
5176; BROADWELL-NEXT:    fucomp %st(3) # sched: [1:1.00]
5177; BROADWELL-NEXT:    fucompp # sched: [3:1.00]
5178; BROADWELL-NEXT:    #NO_APP
5179; BROADWELL-NEXT:    retl # sched: [6:0.50]
5180;
5181; SKYLAKE-LABEL: test_fucom_fucomp_fucompp:
5182; SKYLAKE:       # %bb.0:
5183; SKYLAKE-NEXT:    #APP
5184; SKYLAKE-NEXT:    fucom %st(1) # sched: [1:1.00]
5185; SKYLAKE-NEXT:    fucom %st(3) # sched: [1:1.00]
5186; SKYLAKE-NEXT:    fucomp %st(1) # sched: [1:1.00]
5187; SKYLAKE-NEXT:    fucomp %st(3) # sched: [1:1.00]
5188; SKYLAKE-NEXT:    fucompp # sched: [2:1.00]
5189; SKYLAKE-NEXT:    #NO_APP
5190; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5191;
5192; SKX-LABEL: test_fucom_fucomp_fucompp:
5193; SKX:       # %bb.0:
5194; SKX-NEXT:    #APP
5195; SKX-NEXT:    fucom %st(1) # sched: [1:1.00]
5196; SKX-NEXT:    fucom %st(3) # sched: [1:1.00]
5197; SKX-NEXT:    fucomp %st(1) # sched: [1:1.00]
5198; SKX-NEXT:    fucomp %st(3) # sched: [1:1.00]
5199; SKX-NEXT:    fucompp # sched: [2:1.00]
5200; SKX-NEXT:    #NO_APP
5201; SKX-NEXT:    retl # sched: [6:0.50]
5202;
5203; BTVER2-LABEL: test_fucom_fucomp_fucompp:
5204; BTVER2:       # %bb.0:
5205; BTVER2-NEXT:    #APP
5206; BTVER2-NEXT:    fucom %st(1) # sched: [3:1.00]
5207; BTVER2-NEXT:    fucom %st(3) # sched: [3:1.00]
5208; BTVER2-NEXT:    fucomp %st(1) # sched: [3:1.00]
5209; BTVER2-NEXT:    fucomp %st(3) # sched: [3:1.00]
5210; BTVER2-NEXT:    fucompp # sched: [3:1.00]
5211; BTVER2-NEXT:    #NO_APP
5212; BTVER2-NEXT:    retl # sched: [4:1.00]
5213;
5214; ZNVER1-LABEL: test_fucom_fucomp_fucompp:
5215; ZNVER1:       # %bb.0:
5216; ZNVER1-NEXT:    #APP
5217; ZNVER1-NEXT:    fucom %st(1) # sched: [1:1.00]
5218; ZNVER1-NEXT:    fucom %st(3) # sched: [1:1.00]
5219; ZNVER1-NEXT:    fucomp %st(1) # sched: [1:1.00]
5220; ZNVER1-NEXT:    fucomp %st(3) # sched: [1:1.00]
5221; ZNVER1-NEXT:    fucompp # sched: [1:1.00]
5222; ZNVER1-NEXT:    #NO_APP
5223; ZNVER1-NEXT:    retl # sched: [1:0.50]
5224  tail call void asm sideeffect "fucom \0A\09 fucom %st(3) \0A\09 fucomp \0A\09 fucomp %st(3) \0A\09 fucompp", ""() nounwind
5225  ret void
5226}
5227
5228define void @test_fucomi_fucomip() optsize {
5229; GENERIC-LABEL: test_fucomi_fucomip:
5230; GENERIC:       # %bb.0:
5231; GENERIC-NEXT:    #APP
5232; GENERIC-NEXT:    fucomi %st(3)
5233; GENERIC-NEXT:    fucompi %st(3)
5234; GENERIC-NEXT:    #NO_APP
5235; GENERIC-NEXT:    retl
5236;
5237; ATOM-LABEL: test_fucomi_fucomip:
5238; ATOM:       # %bb.0:
5239; ATOM-NEXT:    #APP
5240; ATOM-NEXT:    fucomi %st(3) # sched: [9:4.50]
5241; ATOM-NEXT:    fucompi %st(3) # sched: [9:4.50]
5242; ATOM-NEXT:    #NO_APP
5243; ATOM-NEXT:    retl # sched: [79:39.50]
5244;
5245; SLM-LABEL: test_fucomi_fucomip:
5246; SLM:       # %bb.0:
5247; SLM-NEXT:    #APP
5248; SLM-NEXT:    fucomi %st(3) # sched: [3:1.00]
5249; SLM-NEXT:    fucompi %st(3) # sched: [3:1.00]
5250; SLM-NEXT:    #NO_APP
5251; SLM-NEXT:    retl # sched: [4:1.00]
5252;
5253; SANDY-LABEL: test_fucomi_fucomip:
5254; SANDY:       # %bb.0:
5255; SANDY-NEXT:    #APP
5256; SANDY-NEXT:    fucomi %st(3) # sched: [3:1.00]
5257; SANDY-NEXT:    fucompi %st(3) # sched: [3:1.00]
5258; SANDY-NEXT:    #NO_APP
5259; SANDY-NEXT:    retl # sched: [6:1.00]
5260;
5261; HASWELL-LABEL: test_fucomi_fucomip:
5262; HASWELL:       # %bb.0:
5263; HASWELL-NEXT:    #APP
5264; HASWELL-NEXT:    fucomi %st(3) # sched: [1:0.50]
5265; HASWELL-NEXT:    fucompi %st(3) # sched: [1:0.50]
5266; HASWELL-NEXT:    #NO_APP
5267; HASWELL-NEXT:    retl # sched: [7:1.00]
5268;
5269; BROADWELL-LABEL: test_fucomi_fucomip:
5270; BROADWELL:       # %bb.0:
5271; BROADWELL-NEXT:    #APP
5272; BROADWELL-NEXT:    fucomi %st(3) # sched: [3:1.00]
5273; BROADWELL-NEXT:    fucompi %st(3) # sched: [3:1.00]
5274; BROADWELL-NEXT:    #NO_APP
5275; BROADWELL-NEXT:    retl # sched: [6:0.50]
5276;
5277; SKYLAKE-LABEL: test_fucomi_fucomip:
5278; SKYLAKE:       # %bb.0:
5279; SKYLAKE-NEXT:    #APP
5280; SKYLAKE-NEXT:    fucomi %st(3) # sched: [2:1.00]
5281; SKYLAKE-NEXT:    fucompi %st(3) # sched: [2:1.00]
5282; SKYLAKE-NEXT:    #NO_APP
5283; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5284;
5285; SKX-LABEL: test_fucomi_fucomip:
5286; SKX:       # %bb.0:
5287; SKX-NEXT:    #APP
5288; SKX-NEXT:    fucomi %st(3) # sched: [2:1.00]
5289; SKX-NEXT:    fucompi %st(3) # sched: [2:1.00]
5290; SKX-NEXT:    #NO_APP
5291; SKX-NEXT:    retl # sched: [6:0.50]
5292;
5293; BTVER2-LABEL: test_fucomi_fucomip:
5294; BTVER2:       # %bb.0:
5295; BTVER2-NEXT:    #APP
5296; BTVER2-NEXT:    fucomi %st(3) # sched: [3:1.00]
5297; BTVER2-NEXT:    fucompi %st(3) # sched: [3:1.00]
5298; BTVER2-NEXT:    #NO_APP
5299; BTVER2-NEXT:    retl # sched: [4:1.00]
5300;
5301; ZNVER1-LABEL: test_fucomi_fucomip:
5302; ZNVER1:       # %bb.0:
5303; ZNVER1-NEXT:    #APP
5304; ZNVER1-NEXT:    fucomi %st(3) # sched: [9:0.50]
5305; ZNVER1-NEXT:    fucompi %st(3) # sched: [9:0.50]
5306; ZNVER1-NEXT:    #NO_APP
5307; ZNVER1-NEXT:    retl # sched: [1:0.50]
5308  tail call void asm sideeffect "fucomi %st(3) \0A\09 fucomip %st(3)", ""() nounwind
5309  ret void
5310}
5311
5312define void @test_fwait() optsize {
5313; GENERIC-LABEL: test_fwait:
5314; GENERIC:       # %bb.0:
5315; GENERIC-NEXT:    #APP
5316; GENERIC-NEXT:    wait
5317; GENERIC-NEXT:    #NO_APP
5318; GENERIC-NEXT:    retl
5319;
5320; ATOM-LABEL: test_fwait:
5321; ATOM:       # %bb.0:
5322; ATOM-NEXT:    #APP
5323; ATOM-NEXT:    wait # sched: [1:0.50]
5324; ATOM-NEXT:    #NO_APP
5325; ATOM-NEXT:    retl # sched: [79:39.50]
5326;
5327; SLM-LABEL: test_fwait:
5328; SLM:       # %bb.0:
5329; SLM-NEXT:    #APP
5330; SLM-NEXT:    wait # sched: [100:1.00]
5331; SLM-NEXT:    #NO_APP
5332; SLM-NEXT:    retl # sched: [4:1.00]
5333;
5334; SANDY-LABEL: test_fwait:
5335; SANDY:       # %bb.0:
5336; SANDY-NEXT:    #APP
5337; SANDY-NEXT:    wait # sched: [100:0.33]
5338; SANDY-NEXT:    #NO_APP
5339; SANDY-NEXT:    retl # sched: [6:1.00]
5340;
5341; HASWELL-LABEL: test_fwait:
5342; HASWELL:       # %bb.0:
5343; HASWELL-NEXT:    #APP
5344; HASWELL-NEXT:    wait # sched: [2:0.50]
5345; HASWELL-NEXT:    #NO_APP
5346; HASWELL-NEXT:    retl # sched: [7:1.00]
5347;
5348; BROADWELL-LABEL: test_fwait:
5349; BROADWELL:       # %bb.0:
5350; BROADWELL-NEXT:    #APP
5351; BROADWELL-NEXT:    wait # sched: [2:0.50]
5352; BROADWELL-NEXT:    #NO_APP
5353; BROADWELL-NEXT:    retl # sched: [6:0.50]
5354;
5355; SKYLAKE-LABEL: test_fwait:
5356; SKYLAKE:       # %bb.0:
5357; SKYLAKE-NEXT:    #APP
5358; SKYLAKE-NEXT:    wait # sched: [2:0.50]
5359; SKYLAKE-NEXT:    #NO_APP
5360; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5361;
5362; SKX-LABEL: test_fwait:
5363; SKX:       # %bb.0:
5364; SKX-NEXT:    #APP
5365; SKX-NEXT:    wait # sched: [2:0.50]
5366; SKX-NEXT:    #NO_APP
5367; SKX-NEXT:    retl # sched: [6:0.50]
5368;
5369; BTVER2-LABEL: test_fwait:
5370; BTVER2:       # %bb.0:
5371; BTVER2-NEXT:    #APP
5372; BTVER2-NEXT:    wait # sched: [100:0.50]
5373; BTVER2-NEXT:    #NO_APP
5374; BTVER2-NEXT:    retl # sched: [4:1.00]
5375;
5376; ZNVER1-LABEL: test_fwait:
5377; ZNVER1:       # %bb.0:
5378; ZNVER1-NEXT:    #APP
5379; ZNVER1-NEXT:    wait # sched: [1:1.00]
5380; ZNVER1-NEXT:    #NO_APP
5381; ZNVER1-NEXT:    retl # sched: [1:0.50]
5382  tail call void asm sideeffect "fwait", ""() nounwind
5383  ret void
5384}
5385
5386define void @test_fxam() optsize {
5387; GENERIC-LABEL: test_fxam:
5388; GENERIC:       # %bb.0:
5389; GENERIC-NEXT:    #APP
5390; GENERIC-NEXT:    fxam
5391; GENERIC-NEXT:    #NO_APP
5392; GENERIC-NEXT:    retl
5393;
5394; ATOM-LABEL: test_fxam:
5395; ATOM:       # %bb.0:
5396; ATOM-NEXT:    #APP
5397; ATOM-NEXT:    fxam # sched: [1:1.00]
5398; ATOM-NEXT:    #NO_APP
5399; ATOM-NEXT:    retl # sched: [79:39.50]
5400;
5401; SLM-LABEL: test_fxam:
5402; SLM:       # %bb.0:
5403; SLM-NEXT:    #APP
5404; SLM-NEXT:    fxam # sched: [100:1.00]
5405; SLM-NEXT:    #NO_APP
5406; SLM-NEXT:    retl # sched: [4:1.00]
5407;
5408; SANDY-LABEL: test_fxam:
5409; SANDY:       # %bb.0:
5410; SANDY-NEXT:    #APP
5411; SANDY-NEXT:    fxam # sched: [100:0.33]
5412; SANDY-NEXT:    #NO_APP
5413; SANDY-NEXT:    retl # sched: [6:1.00]
5414;
5415; HASWELL-LABEL: test_fxam:
5416; HASWELL:       # %bb.0:
5417; HASWELL-NEXT:    #APP
5418; HASWELL-NEXT:    fxam # sched: [1:2.00]
5419; HASWELL-NEXT:    #NO_APP
5420; HASWELL-NEXT:    retl # sched: [7:1.00]
5421;
5422; BROADWELL-LABEL: test_fxam:
5423; BROADWELL:       # %bb.0:
5424; BROADWELL-NEXT:    #APP
5425; BROADWELL-NEXT:    fxam # sched: [100:0.25]
5426; BROADWELL-NEXT:    #NO_APP
5427; BROADWELL-NEXT:    retl # sched: [6:0.50]
5428;
5429; SKYLAKE-LABEL: test_fxam:
5430; SKYLAKE:       # %bb.0:
5431; SKYLAKE-NEXT:    #APP
5432; SKYLAKE-NEXT:    fxam # sched: [100:0.25]
5433; SKYLAKE-NEXT:    #NO_APP
5434; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5435;
5436; SKX-LABEL: test_fxam:
5437; SKX:       # %bb.0:
5438; SKX-NEXT:    #APP
5439; SKX-NEXT:    fxam # sched: [100:0.25]
5440; SKX-NEXT:    #NO_APP
5441; SKX-NEXT:    retl # sched: [6:0.50]
5442;
5443; BTVER2-LABEL: test_fxam:
5444; BTVER2:       # %bb.0:
5445; BTVER2-NEXT:    #APP
5446; BTVER2-NEXT:    fxam # sched: [100:0.50]
5447; BTVER2-NEXT:    #NO_APP
5448; BTVER2-NEXT:    retl # sched: [4:1.00]
5449;
5450; ZNVER1-LABEL: test_fxam:
5451; ZNVER1:       # %bb.0:
5452; ZNVER1-NEXT:    #APP
5453; ZNVER1-NEXT:    fxam # sched: [1:1.00]
5454; ZNVER1-NEXT:    #NO_APP
5455; ZNVER1-NEXT:    retl # sched: [1:0.50]
5456  tail call void asm sideeffect "fxam", ""() nounwind
5457  ret void
5458}
5459
5460define void @test_fxch() optsize {
5461; GENERIC-LABEL: test_fxch:
5462; GENERIC:       # %bb.0:
5463; GENERIC-NEXT:    #APP
5464; GENERIC-NEXT:    fxch %st(1)
5465; GENERIC-NEXT:    fxch %st(3)
5466; GENERIC-NEXT:    #NO_APP
5467; GENERIC-NEXT:    retl
5468;
5469; ATOM-LABEL: test_fxch:
5470; ATOM:       # %bb.0:
5471; ATOM-NEXT:    #APP
5472; ATOM-NEXT:    fxch %st(1) # sched: [1:1.00]
5473; ATOM-NEXT:    fxch %st(3) # sched: [1:1.00]
5474; ATOM-NEXT:    #NO_APP
5475; ATOM-NEXT:    retl # sched: [79:39.50]
5476;
5477; SLM-LABEL: test_fxch:
5478; SLM:       # %bb.0:
5479; SLM-NEXT:    #APP
5480; SLM-NEXT:    fxch %st(1) # sched: [1:0.50]
5481; SLM-NEXT:    fxch %st(3) # sched: [1:0.50]
5482; SLM-NEXT:    #NO_APP
5483; SLM-NEXT:    retl # sched: [4:1.00]
5484;
5485; SANDY-LABEL: test_fxch:
5486; SANDY:       # %bb.0:
5487; SANDY-NEXT:    #APP
5488; SANDY-NEXT:    fxch %st(1) # sched: [1:0.33]
5489; SANDY-NEXT:    fxch %st(3) # sched: [1:0.33]
5490; SANDY-NEXT:    #NO_APP
5491; SANDY-NEXT:    retl # sched: [6:1.00]
5492;
5493; HASWELL-LABEL: test_fxch:
5494; HASWELL:       # %bb.0:
5495; HASWELL-NEXT:    #APP
5496; HASWELL-NEXT:    fxch %st(1) # sched: [17:4.00]
5497; HASWELL-NEXT:    fxch %st(3) # sched: [17:4.00]
5498; HASWELL-NEXT:    #NO_APP
5499; HASWELL-NEXT:    retl # sched: [7:1.00]
5500;
5501; BROADWELL-LABEL: test_fxch:
5502; BROADWELL:       # %bb.0:
5503; BROADWELL-NEXT:    #APP
5504; BROADWELL-NEXT:    fxch %st(1) # sched: [14:4.00]
5505; BROADWELL-NEXT:    fxch %st(3) # sched: [14:4.00]
5506; BROADWELL-NEXT:    #NO_APP
5507; BROADWELL-NEXT:    retl # sched: [6:0.50]
5508;
5509; SKYLAKE-LABEL: test_fxch:
5510; SKYLAKE:       # %bb.0:
5511; SKYLAKE-NEXT:    #APP
5512; SKYLAKE-NEXT:    fxch %st(1) # sched: [17:4.00]
5513; SKYLAKE-NEXT:    fxch %st(3) # sched: [17:4.00]
5514; SKYLAKE-NEXT:    #NO_APP
5515; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5516;
5517; SKX-LABEL: test_fxch:
5518; SKX:       # %bb.0:
5519; SKX-NEXT:    #APP
5520; SKX-NEXT:    fxch %st(1) # sched: [17:4.00]
5521; SKX-NEXT:    fxch %st(3) # sched: [17:4.00]
5522; SKX-NEXT:    #NO_APP
5523; SKX-NEXT:    retl # sched: [6:0.50]
5524;
5525; BTVER2-LABEL: test_fxch:
5526; BTVER2:       # %bb.0:
5527; BTVER2-NEXT:    #APP
5528; BTVER2-NEXT:    fxch %st(1) # sched: [1:0.50]
5529; BTVER2-NEXT:    fxch %st(3) # sched: [1:0.50]
5530; BTVER2-NEXT:    #NO_APP
5531; BTVER2-NEXT:    retl # sched: [4:1.00]
5532;
5533; ZNVER1-LABEL: test_fxch:
5534; ZNVER1:       # %bb.0:
5535; ZNVER1-NEXT:    #APP
5536; ZNVER1-NEXT:    fxch %st(1) # sched: [1:0.25]
5537; ZNVER1-NEXT:    fxch %st(3) # sched: [1:0.25]
5538; ZNVER1-NEXT:    #NO_APP
5539; ZNVER1-NEXT:    retl # sched: [1:0.50]
5540  tail call void asm sideeffect "fxch \0A\09 fxch %st(3)", ""() nounwind
5541  ret void
5542}
5543
5544define void @test_fxrstor_fxsave(i8* %a0) optsize {
5545; GENERIC-LABEL: test_fxrstor_fxsave:
5546; GENERIC:       # %bb.0:
5547; GENERIC-NEXT:    movl {{[0-9]+}}(%esp), %eax
5548; GENERIC-NEXT:    #APP
5549; GENERIC-NEXT:    fxrstor (%eax)
5550; GENERIC-NEXT:    fxsave (%eax)
5551; GENERIC-NEXT:    #NO_APP
5552; GENERIC-NEXT:    retl
5553;
5554; ATOM-LABEL: test_fxrstor_fxsave:
5555; ATOM:       # %bb.0:
5556; ATOM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
5557; ATOM-NEXT:    #APP
5558; ATOM-NEXT:    fxrstor (%eax) # sched: [141:70.50]
5559; ATOM-NEXT:    fxsave (%eax) # sched: [140:70.00]
5560; ATOM-NEXT:    #NO_APP
5561; ATOM-NEXT:    retl # sched: [79:39.50]
5562;
5563; SLM-LABEL: test_fxrstor_fxsave:
5564; SLM:       # %bb.0:
5565; SLM-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
5566; SLM-NEXT:    #APP
5567; SLM-NEXT:    fxrstor (%eax) # sched: [100:1.00]
5568; SLM-NEXT:    fxsave (%eax) # sched: [100:1.00]
5569; SLM-NEXT:    #NO_APP
5570; SLM-NEXT:    retl # sched: [4:1.00]
5571;
5572; SANDY-LABEL: test_fxrstor_fxsave:
5573; SANDY:       # %bb.0:
5574; SANDY-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
5575; SANDY-NEXT:    #APP
5576; SANDY-NEXT:    fxrstor (%eax) # sched: [5:2.00]
5577; SANDY-NEXT:    fxsave (%eax) # sched: [100:0.33]
5578; SANDY-NEXT:    #NO_APP
5579; SANDY-NEXT:    retl # sched: [6:1.00]
5580;
5581; HASWELL-LABEL: test_fxrstor_fxsave:
5582; HASWELL:       # %bb.0:
5583; HASWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
5584; HASWELL-NEXT:    #APP
5585; HASWELL-NEXT:    fxrstor (%eax) # sched: [64:16.50]
5586; HASWELL-NEXT:    fxsave (%eax) # sched: [100:0.25]
5587; HASWELL-NEXT:    #NO_APP
5588; HASWELL-NEXT:    retl # sched: [7:1.00]
5589;
5590; BROADWELL-LABEL: test_fxrstor_fxsave:
5591; BROADWELL:       # %bb.0:
5592; BROADWELL-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
5593; BROADWELL-NEXT:    #APP
5594; BROADWELL-NEXT:    fxrstor (%eax) # sched: [63:16.50]
5595; BROADWELL-NEXT:    fxsave (%eax) # sched: [100:0.25]
5596; BROADWELL-NEXT:    #NO_APP
5597; BROADWELL-NEXT:    retl # sched: [6:0.50]
5598;
5599; SKYLAKE-LABEL: test_fxrstor_fxsave:
5600; SKYLAKE:       # %bb.0:
5601; SKYLAKE-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
5602; SKYLAKE-NEXT:    #APP
5603; SKYLAKE-NEXT:    fxrstor (%eax) # sched: [63:16.50]
5604; SKYLAKE-NEXT:    fxsave (%eax) # sched: [100:0.25]
5605; SKYLAKE-NEXT:    #NO_APP
5606; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5607;
5608; SKX-LABEL: test_fxrstor_fxsave:
5609; SKX:       # %bb.0:
5610; SKX-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
5611; SKX-NEXT:    #APP
5612; SKX-NEXT:    fxrstor (%eax) # sched: [63:16.50]
5613; SKX-NEXT:    fxsave (%eax) # sched: [100:0.25]
5614; SKX-NEXT:    #NO_APP
5615; SKX-NEXT:    retl # sched: [6:0.50]
5616;
5617; BTVER2-LABEL: test_fxrstor_fxsave:
5618; BTVER2:       # %bb.0:
5619; BTVER2-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
5620; BTVER2-NEXT:    #APP
5621; BTVER2-NEXT:    fxrstor (%eax) # sched: [100:0.50]
5622; BTVER2-NEXT:    fxsave (%eax) # sched: [100:0.50]
5623; BTVER2-NEXT:    #NO_APP
5624; BTVER2-NEXT:    retl # sched: [4:1.00]
5625;
5626; ZNVER1-LABEL: test_fxrstor_fxsave:
5627; ZNVER1:       # %bb.0:
5628; ZNVER1-NEXT:    movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
5629; ZNVER1-NEXT:    #APP
5630; ZNVER1-NEXT:    fxrstor (%eax) # sched: [100:0.25]
5631; ZNVER1-NEXT:    fxsave (%eax) # sched: [100:0.25]
5632; ZNVER1-NEXT:    #NO_APP
5633; ZNVER1-NEXT:    retl # sched: [1:0.50]
5634  tail call void asm sideeffect "fxrstor $0 \0A\09 fxsave $0", "*m"(i8 *%a0) nounwind
5635  ret void
5636}
5637
5638define void @test_fxtract() optsize {
5639; GENERIC-LABEL: test_fxtract:
5640; GENERIC:       # %bb.0:
5641; GENERIC-NEXT:    #APP
5642; GENERIC-NEXT:    fxtract
5643; GENERIC-NEXT:    #NO_APP
5644; GENERIC-NEXT:    retl
5645;
5646; ATOM-LABEL: test_fxtract:
5647; ATOM:       # %bb.0:
5648; ATOM-NEXT:    #APP
5649; ATOM-NEXT:    fxtract # sched: [25:12.50]
5650; ATOM-NEXT:    #NO_APP
5651; ATOM-NEXT:    retl # sched: [79:39.50]
5652;
5653; SLM-LABEL: test_fxtract:
5654; SLM:       # %bb.0:
5655; SLM-NEXT:    #APP
5656; SLM-NEXT:    fxtract # sched: [100:1.00]
5657; SLM-NEXT:    #NO_APP
5658; SLM-NEXT:    retl # sched: [4:1.00]
5659;
5660; SANDY-LABEL: test_fxtract:
5661; SANDY:       # %bb.0:
5662; SANDY-NEXT:    #APP
5663; SANDY-NEXT:    fxtract # sched: [100:0.33]
5664; SANDY-NEXT:    #NO_APP
5665; SANDY-NEXT:    retl # sched: [6:1.00]
5666;
5667; HASWELL-LABEL: test_fxtract:
5668; HASWELL:       # %bb.0:
5669; HASWELL-NEXT:    #APP
5670; HASWELL-NEXT:    fxtract # sched: [15:4.25]
5671; HASWELL-NEXT:    #NO_APP
5672; HASWELL-NEXT:    retl # sched: [7:1.00]
5673;
5674; BROADWELL-LABEL: test_fxtract:
5675; BROADWELL:       # %bb.0:
5676; BROADWELL-NEXT:    #APP
5677; BROADWELL-NEXT:    fxtract # sched: [100:0.25]
5678; BROADWELL-NEXT:    #NO_APP
5679; BROADWELL-NEXT:    retl # sched: [6:0.50]
5680;
5681; SKYLAKE-LABEL: test_fxtract:
5682; SKYLAKE:       # %bb.0:
5683; SKYLAKE-NEXT:    #APP
5684; SKYLAKE-NEXT:    fxtract # sched: [100:0.25]
5685; SKYLAKE-NEXT:    #NO_APP
5686; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5687;
5688; SKX-LABEL: test_fxtract:
5689; SKX:       # %bb.0:
5690; SKX-NEXT:    #APP
5691; SKX-NEXT:    fxtract # sched: [100:0.25]
5692; SKX-NEXT:    #NO_APP
5693; SKX-NEXT:    retl # sched: [6:0.50]
5694;
5695; BTVER2-LABEL: test_fxtract:
5696; BTVER2:       # %bb.0:
5697; BTVER2-NEXT:    #APP
5698; BTVER2-NEXT:    fxtract # sched: [100:0.50]
5699; BTVER2-NEXT:    #NO_APP
5700; BTVER2-NEXT:    retl # sched: [4:1.00]
5701;
5702; ZNVER1-LABEL: test_fxtract:
5703; ZNVER1:       # %bb.0:
5704; ZNVER1-NEXT:    #APP
5705; ZNVER1-NEXT:    fxtract # sched: [100:0.25]
5706; ZNVER1-NEXT:    #NO_APP
5707; ZNVER1-NEXT:    retl # sched: [1:0.50]
5708  tail call void asm sideeffect "fxtract", ""() nounwind
5709  ret void
5710}
5711
5712define void @test_fyl2x() optsize {
5713; GENERIC-LABEL: test_fyl2x:
5714; GENERIC:       # %bb.0:
5715; GENERIC-NEXT:    #APP
5716; GENERIC-NEXT:    fyl2x
5717; GENERIC-NEXT:    #NO_APP
5718; GENERIC-NEXT:    retl
5719;
5720; ATOM-LABEL: test_fyl2x:
5721; ATOM:       # %bb.0:
5722; ATOM-NEXT:    #APP
5723; ATOM-NEXT:    fyl2x # sched: [146:73.00]
5724; ATOM-NEXT:    #NO_APP
5725; ATOM-NEXT:    retl # sched: [79:39.50]
5726;
5727; SLM-LABEL: test_fyl2x:
5728; SLM:       # %bb.0:
5729; SLM-NEXT:    #APP
5730; SLM-NEXT:    fyl2x # sched: [100:1.00]
5731; SLM-NEXT:    #NO_APP
5732; SLM-NEXT:    retl # sched: [4:1.00]
5733;
5734; SANDY-LABEL: test_fyl2x:
5735; SANDY:       # %bb.0:
5736; SANDY-NEXT:    #APP
5737; SANDY-NEXT:    fyl2x # sched: [100:0.33]
5738; SANDY-NEXT:    #NO_APP
5739; SANDY-NEXT:    retl # sched: [6:1.00]
5740;
5741; HASWELL-LABEL: test_fyl2x:
5742; HASWELL:       # %bb.0:
5743; HASWELL-NEXT:    #APP
5744; HASWELL-NEXT:    fyl2x # sched: [100:0.25]
5745; HASWELL-NEXT:    #NO_APP
5746; HASWELL-NEXT:    retl # sched: [7:1.00]
5747;
5748; BROADWELL-LABEL: test_fyl2x:
5749; BROADWELL:       # %bb.0:
5750; BROADWELL-NEXT:    #APP
5751; BROADWELL-NEXT:    fyl2x # sched: [100:0.25]
5752; BROADWELL-NEXT:    #NO_APP
5753; BROADWELL-NEXT:    retl # sched: [6:0.50]
5754;
5755; SKYLAKE-LABEL: test_fyl2x:
5756; SKYLAKE:       # %bb.0:
5757; SKYLAKE-NEXT:    #APP
5758; SKYLAKE-NEXT:    fyl2x # sched: [100:0.25]
5759; SKYLAKE-NEXT:    #NO_APP
5760; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5761;
5762; SKX-LABEL: test_fyl2x:
5763; SKX:       # %bb.0:
5764; SKX-NEXT:    #APP
5765; SKX-NEXT:    fyl2x # sched: [100:0.25]
5766; SKX-NEXT:    #NO_APP
5767; SKX-NEXT:    retl # sched: [6:0.50]
5768;
5769; BTVER2-LABEL: test_fyl2x:
5770; BTVER2:       # %bb.0:
5771; BTVER2-NEXT:    #APP
5772; BTVER2-NEXT:    fyl2x # sched: [100:0.50]
5773; BTVER2-NEXT:    #NO_APP
5774; BTVER2-NEXT:    retl # sched: [4:1.00]
5775;
5776; ZNVER1-LABEL: test_fyl2x:
5777; ZNVER1:       # %bb.0:
5778; ZNVER1-NEXT:    #APP
5779; ZNVER1-NEXT:    fyl2x # sched: [100:0.25]
5780; ZNVER1-NEXT:    #NO_APP
5781; ZNVER1-NEXT:    retl # sched: [1:0.50]
5782  tail call void asm sideeffect "fyl2x", ""() nounwind
5783  ret void
5784}
5785
5786define void @test_fyl2xp1() optsize {
5787; GENERIC-LABEL: test_fyl2xp1:
5788; GENERIC:       # %bb.0:
5789; GENERIC-NEXT:    #APP
5790; GENERIC-NEXT:    fyl2xp1
5791; GENERIC-NEXT:    #NO_APP
5792; GENERIC-NEXT:    retl
5793;
5794; ATOM-LABEL: test_fyl2xp1:
5795; ATOM:       # %bb.0:
5796; ATOM-NEXT:    #APP
5797; ATOM-NEXT:    fyl2xp1 # sched: [147:73.50]
5798; ATOM-NEXT:    #NO_APP
5799; ATOM-NEXT:    retl # sched: [79:39.50]
5800;
5801; SLM-LABEL: test_fyl2xp1:
5802; SLM:       # %bb.0:
5803; SLM-NEXT:    #APP
5804; SLM-NEXT:    fyl2xp1 # sched: [100:1.00]
5805; SLM-NEXT:    #NO_APP
5806; SLM-NEXT:    retl # sched: [4:1.00]
5807;
5808; SANDY-LABEL: test_fyl2xp1:
5809; SANDY:       # %bb.0:
5810; SANDY-NEXT:    #APP
5811; SANDY-NEXT:    fyl2xp1 # sched: [100:0.33]
5812; SANDY-NEXT:    #NO_APP
5813; SANDY-NEXT:    retl # sched: [6:1.00]
5814;
5815; HASWELL-LABEL: test_fyl2xp1:
5816; HASWELL:       # %bb.0:
5817; HASWELL-NEXT:    #APP
5818; HASWELL-NEXT:    fyl2xp1 # sched: [100:0.25]
5819; HASWELL-NEXT:    #NO_APP
5820; HASWELL-NEXT:    retl # sched: [7:1.00]
5821;
5822; BROADWELL-LABEL: test_fyl2xp1:
5823; BROADWELL:       # %bb.0:
5824; BROADWELL-NEXT:    #APP
5825; BROADWELL-NEXT:    fyl2xp1 # sched: [100:0.25]
5826; BROADWELL-NEXT:    #NO_APP
5827; BROADWELL-NEXT:    retl # sched: [6:0.50]
5828;
5829; SKYLAKE-LABEL: test_fyl2xp1:
5830; SKYLAKE:       # %bb.0:
5831; SKYLAKE-NEXT:    #APP
5832; SKYLAKE-NEXT:    fyl2xp1 # sched: [100:0.25]
5833; SKYLAKE-NEXT:    #NO_APP
5834; SKYLAKE-NEXT:    retl # sched: [6:0.50]
5835;
5836; SKX-LABEL: test_fyl2xp1:
5837; SKX:       # %bb.0:
5838; SKX-NEXT:    #APP
5839; SKX-NEXT:    fyl2xp1 # sched: [100:0.25]
5840; SKX-NEXT:    #NO_APP
5841; SKX-NEXT:    retl # sched: [6:0.50]
5842;
5843; BTVER2-LABEL: test_fyl2xp1:
5844; BTVER2:       # %bb.0:
5845; BTVER2-NEXT:    #APP
5846; BTVER2-NEXT:    fyl2xp1 # sched: [100:0.50]
5847; BTVER2-NEXT:    #NO_APP
5848; BTVER2-NEXT:    retl # sched: [4:1.00]
5849;
5850; ZNVER1-LABEL: test_fyl2xp1:
5851; ZNVER1:       # %bb.0:
5852; ZNVER1-NEXT:    #APP
5853; ZNVER1-NEXT:    fyl2xp1 # sched: [100:0.25]
5854; ZNVER1-NEXT:    #NO_APP
5855; ZNVER1-NEXT:    retl # sched: [1:0.50]
5856  tail call void asm sideeffect "fyl2xp1", ""() nounwind
5857  ret void
5858}
5859