llvm.org GIT mirror llvm / 68c0fa1
Merging r352607 r352608 r353015 r353061 r353138 r353141 r353334 r353489 And re-generate expectations for a test: $ utils/update_llc_test_checks.py --llc-binary ../build.release/bin/llc test/CodeGen/X86/x87-schedule.ll Will also merge cfe r353142 for a clang-side test. This merge was requested in PR40667. ------------------------------------------------------------------------ r352607 | ctopper | 2019-01-30 08:08:44 +0100 (Wed, 30 Jan 2019) | 1 line [X86] Add FPSW as a Def on some FP instructions that were missing it. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r352608 | ctopper | 2019-01-30 08:33:24 +0100 (Wed, 30 Jan 2019) | 5 lines [X86] Remove a couple places where we unnecessarily pass 0 to the EmitPriority of some FP instruction aliases. NFC As far as I can tell we already won't emit these aliases due to an operand count check in the tablegen code. Removing these because I couldn't make sense of the inconsistency between fadd and fmul from reading the code. I checked the AsmMatcher and AsmWriter files before and after this change and there were no differences. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r353015 | ctopper | 2019-02-04 05:15:10 +0100 (Mon, 04 Feb 2019) | 3 lines [X86] Print %st(0) as %st when its implicit to the instruction. Continue printing it as %st(0) when its encoded in the instruction. This is a step back from the change I made in r352985. This appears to be more consistent with gcc and objdump behavior. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r353061 | ctopper | 2019-02-04 18:28:18 +0100 (Mon, 04 Feb 2019) | 5 lines [X86] Print all register forms of x87 fadd/fsub/fdiv/fmul as having two arguments where on is %st. All of these instructions consume one encoded register and the other register is %st. They either write the result to %st or the encoded register. Previously we printed both arguments when the encoded register was written. And we printed one argument when the result was written to %st. For the stack popping forms the encoded register is always the destination and we didn't print both operands. This was inconsistent with gcc and objdump and just makes the output assembly code harder to read. This patch changes things to always print both operands making us consistent with gcc and objdump. The parser should still be able to handle the single register forms just as it did before. This also matches the GNU assembler behavior. ------------------------------------------------------------------------ ------------------------------------------------------------------------ r353138 | ctopper | 2019-02-05 05:48:23 +0100 (Tue, 05 Feb 2019) | 1 line [X86] Add test case from PR40529. NFC ------------------------------------------------------------------------ ------------------------------------------------------------------------ r353141 | ctopper | 2019-02-05 07:13:06 +0100 (Tue, 05 Feb 2019) | 16 lines [X86] Connect the default fpsr and dirflag clobbers in inline assembly to the registers we have defined for them. Summary: We don't currently map these constraints to physical register numbers so they don't make it to the MachineIR representation of inline assembly. This could have problems for proper dependency tracking in the machine schedulers though I don't have a test case that shows that. Reviewers: rnk Reviewed By: rnk Subscribers: eraman, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D57641 ------------------------------------------------------------------------ ------------------------------------------------------------------------ r353334 | ctopper | 2019-02-06 20:50:59 +0100 (Wed, 06 Feb 2019) | 1 line [X86] Change the CPU on the test case for pr40529.ll to really show the bug. NFC ------------------------------------------------------------------------ ------------------------------------------------------------------------ r353489 | ctopper | 2019-02-08 01:44:39 +0100 (Fri, 08 Feb 2019) | 14 lines [X86] Add FPCW as a register and start using it as an implicit use on floating point instructions. Summary: FPCW contains the rounding mode control which we manipulate to implement fp to integer conversion by changing the roudning mode, storing the value to the stack, and then changing the rounding mode back. Because we didn't model FPCW and its dependency chain, other instructions could be scheduled into the middle of the sequence. This patch introduces the register and adds it as an implciit def of FLDCW and implicit use of the FP binary arithmetic instructions and store instructions. There are more instructions that need to be updated, but this is a good start. I believe this fixes at least the reduced test case from PR40529. Reviewers: RKSimon, spatel, rnk, efriedma, andrew.w.kaylor Subscribers: dim, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D57735 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_80@353818 91177308-0d34-0410-b5e6-96231b3b80d8 Hans Wennborg 1 year, 9 months ago
52 changed file(s) with 2116 addition(s) and 2023 deletion(s). Raw diff Collapse all Expand all
11141114 }
11151115
11161116 // Parse "%st" as "%st(0)" and "%st(1)", which is multiple tokens.
1117 if (RegNo == 0 && (Tok.getString() == "st" || Tok.getString() == "ST")) {
1118 RegNo = X86::ST0;
1117 if (RegNo == X86::ST0) {
11191118 Parser.Lex(); // Eat 'st'
11201119
11211120 // Check to see if we have '(4)' after %st.
199199 O << markup("getOperand(Op).getImm() & 0xff)
200200 << markup(">");
201201 }
202
203 void X86ATTInstPrinter::printSTiRegOperand(const MCInst *MI, unsigned OpNo,
204 raw_ostream &OS) {
205 const MCOperand &Op = MI->getOperand(OpNo);
206 unsigned Reg = Op.getReg();
207 // Override the default printing to print st(0) instead st.
208 if (Reg == X86::ST0)
209 OS << markup("");
210 else
211 printRegName(OS, Reg);
212 }
4343 void printSrcIdx(const MCInst *MI, unsigned Op, raw_ostream &O);
4444 void printDstIdx(const MCInst *MI, unsigned Op, raw_ostream &O);
4545 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &OS);
46 void printSTiRegOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
4647
4748 void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
4849 printMemReference(MI, OpNo, O);
159159
160160 O << formatImm(MI->getOperand(Op).getImm() & 0xff);
161161 }
162
163 void X86IntelInstPrinter::printSTiRegOperand(const MCInst *MI, unsigned OpNo,
164 raw_ostream &OS) {
165 const MCOperand &Op = MI->getOperand(OpNo);
166 unsigned Reg = Op.getReg();
167 // Override the default printing to print st(0) instead st.
168 if (Reg == X86::ST0)
169 OS << "st(0)";
170 else
171 printRegName(OS, Reg);
172 }
3838 void printSrcIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
3939 void printDstIdx(const MCInst *MI, unsigned OpNo, raw_ostream &O);
4040 void printU8Imm(const MCInst *MI, unsigned Op, raw_ostream &O);
41 void printSTiRegOperand(const MCInst *MI, unsigned OpNo, raw_ostream &OS);
4142
4243 void printanymem(const MCInst *MI, unsigned OpNo, raw_ostream &O) {
4344 printMemReference(MI, OpNo, O);
4250642506 if (StringRef("{flags}").equals_lower(Constraint))
4250742507 return std::make_pair(X86::EFLAGS, &X86::CCRRegClass);
4250842508
42509 // dirflag -> DF
42510 if (StringRef("{dirflag}").equals_lower(Constraint))
42511 return std::make_pair(X86::DF, &X86::DFCCRRegClass);
42512
42513 // fpsr -> FPSW
42514 if (StringRef("{fpsr}").equals_lower(Constraint))
42515 return std::make_pair(X86::FPSW, &X86::FPCCRRegClass);
42516
4250942517 // 'A' means [ER]AX + [ER]DX.
4251042518 if (Constraint == "A") {
4251142519 if (Subtarget.is64Bit())
229229 } // mayLoad = 1, hasSideEffects = 1
230230 }
231231
232 let Defs = [FPSW] in {
232 let Defs = [FPSW], Uses = [FPCW] in {
233233 // FPBinary_rr just defines pseudo-instructions, no need to set a scheduling
234234 // resources.
235235 let hasNoSchedulingInfo = 1 in {
257257 } // Defs = [FPSW]
258258
259259 class FPST0rInst
260 : FPI<0xD8, fp, (outs), (ins RST:$op), asm>;
260 : FPI<0xD8, fp, (outs), (ins RSTi:$op), asm>;
261261 class FPrST0Inst
262 : FPI<0xDC, fp, (outs), (ins RST:$op), asm>;
262 : FPI<0xDC, fp, (outs), (ins RSTi:$op), asm>;
263263 class FPrST0PInst
264 : FPI<0xDE, fp, (outs), (ins RST:$op), asm>;
264 : FPI<0xDE, fp, (outs), (ins RSTi:$op), asm>;
265265
266266 // NOTE: GAS and apparently all other AT&T style assemblers have a broken notion
267267 // of some of the 'reverse' forms of the fsub and fdiv instructions. As such,
268268 // we have to put some 'r's in and take them out of weird places.
269 let SchedRW = [WriteFAdd] in {
270 def ADD_FST0r : FPST0rInst ;
271 def ADD_FrST0 : FPrST0Inst ;
272 def ADD_FPrST0 : FPrST0PInst;
273 def SUBR_FST0r : FPST0rInst ;
274 def SUB_FrST0 : FPrST0Inst ;
275 def SUB_FPrST0 : FPrST0PInst;
276 def SUB_FST0r : FPST0rInst ;
277 def SUBR_FrST0 : FPrST0Inst ;
278 def SUBR_FPrST0 : FPrST0PInst;
279 } // SchedRW
280 let SchedRW = [WriteFCom] in {
269 let SchedRW = [WriteFAdd], Defs = [FPSW], Uses = [FPCW] in {
270 def ADD_FST0r : FPST0rInst ;
271 def ADD_FrST0 : FPrST0Inst ;
272 def ADD_FPrST0 : FPrST0PInst;
273 def SUBR_FST0r : FPST0rInst ;
274 def SUB_FrST0 : FPrST0Inst ;
275 def SUB_FPrST0 : FPrST0PInst;
276 def SUB_FST0r : FPST0rInst ;
277 def SUBR_FrST0 : FPrST0Inst ;
278 def SUBR_FPrST0 : FPrST0PInst;
279 } // SchedRW
280 let SchedRW = [WriteFCom], Defs = [FPSW], Uses = [FPCW] in {
281281 def COM_FST0r : FPST0rInst ;
282282 def COMP_FST0r : FPST0rInst ;
283283 } // SchedRW
284 let SchedRW = [WriteFMul] in {
285 def MUL_FST0r : FPST0rInst ;
286 def MUL_FrST0 : FPrST0Inst ;
287 def MUL_FPrST0 : FPrST0PInst;
288 } // SchedRW
289 let SchedRW = [WriteFDiv] in {
290 def DIVR_FST0r : FPST0rInst ;
291 def DIV_FrST0 : FPrST0Inst ;
292 def DIV_FPrST0 : FPrST0PInst;
293 def DIV_FST0r : FPST0rInst ;
294 def DIVR_FrST0 : FPrST0Inst ;
295 def DIVR_FPrST0 : FPrST0PInst;
284 let SchedRW = [WriteFMul], Defs = [FPSW], Uses = [FPCW] in {
285 def MUL_FST0r : FPST0rInst ;
286 def MUL_FrST0 : FPrST0Inst ;
287 def MUL_FPrST0 : FPrST0PInst;
288 } // SchedRW
289 let SchedRW = [WriteFDiv], Defs = [FPSW], Uses = [FPCW] in {
290 def DIVR_FST0r : FPST0rInst ;
291 def DIV_FrST0 : FPrST0Inst ;
292 def DIV_FPrST0 : FPrST0PInst;
293 def DIV_FST0r : FPST0rInst ;
294 def DIVR_FrST0 : FPrST0Inst ;
295 def DIVR_FPrST0 : FPrST0PInst;
296296 } // SchedRW
297297
298298 // Unary operations.
306306 def _F : FPI<0xD9, fp, (outs), (ins), asmstring>;
307307 }
308308
309 let Defs = [FPSW] in {
309 let Defs = [FPSW], Uses = [FPCW] in {
310310
311311 let SchedRW = [WriteFSign] in {
312312 defm CHS : FPUnary;
334334
335335 // Versions of FP instructions that take a single memory operand. Added for the
336336 // disassembler; remove as they are included with patterns elsewhere.
337 let SchedRW = [WriteFComLd] in {
337 let SchedRW = [WriteFComLd], Defs = [FPSW], Uses = [FPCW] in {
338338 def FCOM32m : FPI<0xD8, MRM2m, (outs), (ins f32mem:$src), "fcom{s}\t$src">;
339339 def FCOMP32m : FPI<0xD8, MRM3m, (outs), (ins f32mem:$src), "fcomp{s}\t$src">;
340340
397397
398398 let Predicates = [HasCMov] in {
399399 // These are not factored because there's no clean way to pass DA/DB.
400 def CMOVB_F : FPI<0xDA, MRM0r, (outs), (ins RST:$op),
401 "fcmovb\t{$op, %st(0)|st(0), $op}">;
402 def CMOVBE_F : FPI<0xDA, MRM2r, (outs), (ins RST:$op),
403 "fcmovbe\t{$op, %st(0)|st(0), $op}">;
404 def CMOVE_F : FPI<0xDA, MRM1r, (outs), (ins RST:$op),
405 "fcmove\t{$op, %st(0)|st(0), $op}">;
406 def CMOVP_F : FPI<0xDA, MRM3r, (outs), (ins RST:$op),
407 "fcmovu\t{$op, %st(0)|st(0), $op}">;
408 def CMOVNB_F : FPI<0xDB, MRM0r, (outs), (ins RST:$op),
409 "fcmovnb\t{$op, %st(0)|st(0), $op}">;
410 def CMOVNBE_F: FPI<0xDB, MRM2r, (outs), (ins RST:$op),
411 "fcmovnbe\t{$op, %st(0)|st(0), $op}">;
412 def CMOVNE_F : FPI<0xDB, MRM1r, (outs), (ins RST:$op),
413 "fcmovne\t{$op, %st(0)|st(0), $op}">;
414 def CMOVNP_F : FPI<0xDB, MRM3r, (outs), (ins RST:$op),
415 "fcmovnu\t{$op, %st(0)|st(0), $op}">;
400 def CMOVB_F : FPI<0xDA, MRM0r, (outs), (ins RSTi:$op),
401 "fcmovb\t{$op, %st|st, $op}">;
402 def CMOVBE_F : FPI<0xDA, MRM2r, (outs), (ins RSTi:$op),
403 "fcmovbe\t{$op, %st|st, $op}">;
404 def CMOVE_F : FPI<0xDA, MRM1r, (outs), (ins RSTi:$op),
405 "fcmove\t{$op, %st|st, $op}">;
406 def CMOVP_F : FPI<0xDA, MRM3r, (outs), (ins RSTi:$op),
407 "fcmovu\t{$op, %st|st, $op}">;
408 def CMOVNB_F : FPI<0xDB, MRM0r, (outs), (ins RSTi:$op),
409 "fcmovnb\t{$op, %st|st, $op}">;
410 def CMOVNBE_F: FPI<0xDB, MRM2r, (outs), (ins RSTi:$op),
411 "fcmovnbe\t{$op, %st|st, $op}">;
412 def CMOVNE_F : FPI<0xDB, MRM1r, (outs), (ins RSTi:$op),
413 "fcmovne\t{$op, %st|st, $op}">;
414 def CMOVNP_F : FPI<0xDB, MRM3r, (outs), (ins RSTi:$op),
415 "fcmovnu\t{$op, %st|st, $op}">;
416416 } // Predicates = [HasCMov]
417417 } // SchedRW
418418
453453 [(set RFP80:$dst, (X86fild addr:$src, i64))]>;
454454 } // SchedRW
455455
456 let SchedRW = [WriteStore] in {
456 let SchedRW = [WriteStore], Uses = [FPCW] in {
457457 def ST_Fp32m : FpIf32<(outs), (ins f32mem:$op, RFP32:$src), OneArgFP,
458458 [(store RFP32:$src, addr:$op)]>;
459459 def ST_Fp64m32 : FpIf64<(outs), (ins f32mem:$op, RFP64:$src), OneArgFP,
488488 def IST_Fp32m80 : FpI_<(outs), (ins i32mem:$op, RFP80:$src), OneArgFP, []>;
489489 def IST_Fp64m80 : FpI_<(outs), (ins i64mem:$op, RFP80:$src), OneArgFP, []>;
490490 } // mayStore
491 } // SchedRW
491 } // SchedRW, Uses = [FPCW]
492492
493493 let mayLoad = 1, SchedRW = [WriteLoad] in {
494494 def LD_F32m : FPI<0xD9, MRM0m, (outs), (ins f32mem:$src), "fld{s}\t$src">;
498498 def ILD_F32m : FPI<0xDB, MRM0m, (outs), (ins i32mem:$src), "fild{l}\t$src">;
499499 def ILD_F64m : FPI<0xDF, MRM5m, (outs), (ins i64mem:$src), "fild{ll}\t$src">;
500500 }
501 let mayStore = 1, SchedRW = [WriteStore] in {
501 let mayStore = 1, SchedRW = [WriteStore], Uses = [FPCW] in {
502502 def ST_F32m : FPI<0xD9, MRM2m, (outs), (ins f32mem:$dst), "fst{s}\t$dst">;
503503 def ST_F64m : FPI<0xDD, MRM2m, (outs), (ins f64mem:$dst), "fst{l}\t$dst">;
504504 def ST_FP32m : FPI<0xD9, MRM3m, (outs), (ins f32mem:$dst), "fstp{s}\t$dst">;
512512 }
513513
514514 // FISTTP requires SSE3 even though it's a FPStack op.
515 let Predicates = [HasSSE3], SchedRW = [WriteStore] in {
515 let Predicates = [HasSSE3], SchedRW = [WriteStore], Uses = [FPCW] in {
516516 def ISTT_Fp16m32 : FpI_<(outs), (ins i16mem:$op, RFP32:$src), OneArgFP,
517517 [(X86fp_to_i16mem RFP32:$src, addr:$op)]>;
518518 def ISTT_Fp32m32 : FpI_<(outs), (ins i32mem:$op, RFP32:$src), OneArgFP,
533533 [(X86fp_to_i64mem RFP80:$src, addr:$op)]>;
534534 } // Predicates = [HasSSE3]
535535
536 let mayStore = 1, SchedRW = [WriteStore] in {
536 let mayStore = 1, SchedRW = [WriteStore], Uses = [FPCW] in {
537537 def ISTT_FP16m : FPI<0xDF, MRM1m, (outs), (ins i16mem:$dst), "fisttp{s}\t$dst">;
538538 def ISTT_FP32m : FPI<0xDB, MRM1m, (outs), (ins i32mem:$dst), "fisttp{l}\t$dst">;
539539 def ISTT_FP64m : FPI<0xDD, MRM1m, (outs), (ins i64mem:$dst), "fisttp{ll}\t$dst">;
541541
542542 // FP Stack manipulation instructions.
543543 let SchedRW = [WriteMove] in {
544 def LD_Frr : FPI<0xD9, MRM0r, (outs), (ins RST:$op), "fld\t$op">;
545 def ST_Frr : FPI<0xDD, MRM2r, (outs), (ins RST:$op), "fst\t$op">;
546 def ST_FPrr : FPI<0xDD, MRM3r, (outs), (ins RST:$op), "fstp\t$op">;
547 def XCH_F : FPI<0xD9, MRM1r, (outs), (ins RST:$op), "fxch\t$op">;
544 def LD_Frr : FPI<0xD9, MRM0r, (outs), (ins RSTi:$op), "fld\t$op">;
545 def ST_Frr : FPI<0xDD, MRM2r, (outs), (ins RSTi:$op), "fst\t$op">;
546 def ST_FPrr : FPI<0xDD, MRM3r, (outs), (ins RSTi:$op), "fstp\t$op">;
547 def XCH_F : FPI<0xD9, MRM1r, (outs), (ins RSTi:$op), "fxch\t$op">;
548548 }
549549
550550 // Floating point constant loads.
569569 let SchedRW = [WriteFLD1] in
570570 def LD_F1 : FPI<0xD9, MRM_E8, (outs), (ins), "fld1">;
571571
572 let SchedRW = [WriteFLDC], Defs = [FPSW] in {
572 let SchedRW = [WriteFLDC] in {
573573 def FLDL2T : I<0xD9, MRM_E9, (outs), (ins), "fldl2t", []>;
574574 def FLDL2E : I<0xD9, MRM_EA, (outs), (ins), "fldl2e", []>;
575575 def FLDPI : I<0xD9, MRM_EB, (outs), (ins), "fldpi", []>;
578578 } // SchedRW
579579
580580 // Floating point compares.
581 let SchedRW = [WriteFCom] in {
581 let SchedRW = [WriteFCom], Uses = [FPCW] in {
582582 def UCOM_Fpr32 : FpIf32<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
583583 [(set FPSW, (trunc (X86cmp RFP32:$lhs, RFP32:$rhs)))]>;
584584 def UCOM_Fpr64 : FpIf64<(outs), (ins RFP64:$lhs, RFP64:$rhs), CompareFP,
590590
591591 let SchedRW = [WriteFCom] in {
592592 // CC = ST(0) cmp ST(i)
593 let Defs = [EFLAGS, FPSW] in {
594 let Predicates = [FPStackf32, HasCMov] in
595 def UCOM_FpIr32: FpIf32<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
596 [(set EFLAGS, (X86cmp RFP32:$lhs, RFP32:$rhs))]>;
597 let Predicates = [FPStackf64, HasCMov] in
598 def UCOM_FpIr64: FpIf64<(outs), (ins RFP64:$lhs, RFP64:$rhs), CompareFP,
599 [(set EFLAGS, (X86cmp RFP64:$lhs, RFP64:$rhs))]>;
600 let Predicates = [HasCMov] in
593 let Defs = [EFLAGS, FPSW], Uses = [FPCW] in {
594 def UCOM_FpIr32: FpI_<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
595 [(set EFLAGS, (X86cmp RFP32:$lhs, RFP32:$rhs))]>,
596 Requires<[FPStackf32, HasCMov]>;
597 def UCOM_FpIr64: FpI_<(outs), (ins RFP64:$lhs, RFP64:$rhs), CompareFP,
598 [(set EFLAGS, (X86cmp RFP64:$lhs, RFP64:$rhs))]>,
599 Requires<[FPStackf64, HasCMov]>;
601600 def UCOM_FpIr80: FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
602 [(set EFLAGS, (X86cmp RFP80:$lhs, RFP80:$rhs))]>;
603 }
604
605 let Defs = [FPSW], Uses = [ST0] in {
601 [(set EFLAGS, (X86cmp RFP80:$lhs, RFP80:$rhs))]>,
602 Requires<[HasCMov]>;
603 }
604
605 let Defs = [FPSW], Uses = [ST0, FPCW] in {
606606 def UCOM_Fr : FPI<0xDD, MRM4r, // FPSW = cmp ST(0) with ST(i)
607 (outs), (ins RST:$reg), "fucom\t$reg">;
607 (outs), (ins RSTi:$reg), "fucom\t$reg">;
608608 def UCOM_FPr : FPI<0xDD, MRM5r, // FPSW = cmp ST(0) with ST(i), pop
609 (outs), (ins RST:$reg), "fucomp\t$reg">;
609 (outs), (ins RSTi:$reg), "fucomp\t$reg">;
610610 def UCOM_FPPr : FPI<0xDA, MRM_E9, // cmp ST(0) with ST(1), pop, pop
611611 (outs), (ins), "fucompp">;
612612 }
613613
614 let Defs = [EFLAGS, FPSW], Uses = [ST0] in {
614 let Defs = [EFLAGS, FPSW], Uses = [ST0, FPCW] in {
615615 def UCOM_FIr : FPI<0xDB, MRM5r, // CC = cmp ST(0) with ST(i)
616 (outs), (ins RST:$reg), "fucomi\t$reg">;
616 (outs), (ins RSTi:$reg), "fucomi\t{$reg, %st|st, $reg}">;
617617 def UCOM_FIPr : FPI<0xDF, MRM5r, // CC = cmp ST(0) with ST(i), pop
618 (outs), (ins RST:$reg), "fucompi\t$reg">;
619 }
620
621 let Defs = [EFLAGS, FPSW] in {
622 def COM_FIr : FPI<0xDB, MRM6r, (outs), (ins RST:$reg), "fcomi\t$reg">;
623 def COM_FIPr : FPI<0xDF, MRM6r, (outs), (ins RST:$reg), "fcompi\t$reg">;
618 (outs), (ins RSTi:$reg), "fucompi\t{$reg, %st|st, $reg}">;
619
620 def COM_FIr : FPI<0xDB, MRM6r, (outs), (ins RSTi:$reg),
621 "fcomi\t{$reg, %st|st, $reg}">;
622 def COM_FIPr : FPI<0xDF, MRM6r, (outs), (ins RSTi:$reg),
623 "fcompi\t{$reg, %st|st, $reg}">;
624624 }
625625 } // SchedRW
626626
630630 def FNSTSW16r : I<0xDF, MRM_E0, // AX = fp flags
631631 (outs), (ins), "fnstsw\t{%ax|ax}",
632632 [(set AX, (X86fp_stsw FPSW))]>;
633 let Defs = [FPSW] in
633 let Defs = [FPSW], Uses = [FPCW] in
634634 def FNSTCW16m : I<0xD9, MRM7m, // [mem16] = X87 control world
635635 (outs), (ins i16mem:$dst), "fnstcw\t$dst",
636636 [(X86fp_cwd_get16 addr:$dst)]>;
637637 } // SchedRW
638 let Defs = [FPSW], mayLoad = 1 in
638 let Defs = [FPSW,FPCW], mayLoad = 1 in
639639 def FLDCW16m : I<0xD9, MRM5m, // X87 control world = [mem16]
640640 (outs), (ins i16mem:$dst), "fldcw\t$dst", []>,
641641 Sched<[WriteLoad]>;
644644 let SchedRW = [WriteMicrocoded] in {
645645 let Defs = [FPSW] in {
646646 def FNINIT : I<0xDB, MRM_E3, (outs), (ins), "fninit", []>;
647 def FFREE : FPI<0xDD, MRM0r, (outs), (ins RST:$reg), "ffree\t$reg">;
648 def FFREEP : FPI<0xDF, MRM0r, (outs), (ins RST:$reg), "ffreep\t$reg">;
647 def FFREE : FPI<0xDD, MRM0r, (outs), (ins RSTi:$reg), "ffree\t$reg">;
648 def FFREEP : FPI<0xDF, MRM0r, (outs), (ins RSTi:$reg), "ffreep\t$reg">;
649649
650650 // Clear exceptions
651651 def FNCLEX : I<0xDB, MRM_E2, (outs), (ins), "fnclex", []>;
32303230 // instructions like "fadd %st(0), %st(0)" as "fadd %st(0)" for consistency with
32313231 // gas.
32323232 multiclass FpUnaryAlias {
3233 def : InstAlias
3234 (Inst RST:$op), EmitAlias>;
3235 def : InstAlias{%st(0), %st(0)|st(0), st(0)}"),
3233 def : InstAlias$op"),
3234 (Inst RSTi:$op), EmitAlias>;
3235 def : InstAlias
32363236 (Inst ST0), EmitAlias>;
32373237 }
32383238
3239 defm : FpUnaryAlias<"fadd", ADD_FST0r>;
3239 defm : FpUnaryAlias<"fadd", ADD_FST0r, 0>;
32403240 defm : FpUnaryAlias<"faddp", ADD_FPrST0, 0>;
3241 defm : FpUnaryAlias<"fsub", SUB_FST0r>;
3242 defm : FpUnaryAlias<"fsub{|r}p", SUBR_FPrST0>;
3243 defm : FpUnaryAlias<"fsubr", SUBR_FST0r>;
3244 defm : FpUnaryAlias<"fsub{r|}p", SUB_FPrST0>;
3245 defm : FpUnaryAlias<"fmul", MUL_FST0r>;
3246 defm : FpUnaryAlias<"fmulp", MUL_FPrST0>;
3247 defm : FpUnaryAlias<"fdiv", DIV_FST0r>;
3248 defm : FpUnaryAlias<"fdiv{|r}p", DIVR_FPrST0>;
3249 defm : FpUnaryAlias<"fdivr", DIVR_FST0r>;
3250 defm : FpUnaryAlias<"fdiv{r|}p", DIV_FPrST0>;
3241 defm : FpUnaryAlias<"fsub", SUB_FST0r, 0>;
3242 defm : FpUnaryAlias<"fsub{|r}p", SUBR_FPrST0, 0>;
3243 defm : FpUnaryAlias<"fsubr", SUBR_FST0r, 0>;
3244 defm : FpUnaryAlias<"fsub{r|}p", SUB_FPrST0, 0>;
3245 defm : FpUnaryAlias<"fmul", MUL_FST0r, 0>;
3246 defm : FpUnaryAlias<"fmulp", MUL_FPrST0, 0>;
3247 defm : FpUnaryAlias<"fdiv", DIV_FST0r, 0>;
3248 defm : FpUnaryAlias<"fdiv{|r}p", DIVR_FPrST0, 0>;
3249 defm : FpUnaryAlias<"fdivr", DIVR_FST0r, 0>;
3250 defm : FpUnaryAlias<"fdiv{r|}p", DIV_FPrST0, 0>;
32513251 defm : FpUnaryAlias<"fcomi", COM_FIr, 0>;
32523252 defm : FpUnaryAlias<"fucomi", UCOM_FIr, 0>;
3253 defm : FpUnaryAlias<"fcompi", COM_FIPr>;
3254 defm : FpUnaryAlias<"fucompi", UCOM_FIPr>;
3255
3256
3257 // Handle "f{mulp,addp} st(0), $op" the same as "f{mulp,addp} $op", since they
3253 defm : FpUnaryAlias<"fcompi", COM_FIPr, 0>;
3254 defm : FpUnaryAlias<"fucompi", UCOM_FIPr, 0>;
3255
3256
3257 // Handle "f{mulp,addp} $op, %st(0)" the same as "f{mulp,addp} $op", since they
32583258 // commute. We also allow fdiv[r]p/fsubrp even though they don't commute,
32593259 // solely because gas supports it.
3260 def : InstAlias<"faddp\t{%st(0), $op|$op, st(0)}", (ADD_FPrST0 RST:$op), 0>;
3261 def : InstAlias<"fmulp\t{%st(0), $op|$op, st(0)}", (MUL_FPrST0 RST:$op)>;
3262 def : InstAlias<"fsub{|r}p\t{%st(0), $op|$op, st(0)}", (SUBR_FPrST0 RST:$op)>;
3263 def : InstAlias<"fsub{r|}p\t{%st(0), $op|$op, st(0)}", (SUB_FPrST0 RST:$op)>;
3264 def : InstAlias<"fdiv{|r}p\t{%st(0), $op|$op, st(0)}", (DIVR_FPrST0 RST:$op)>;
3265 def : InstAlias<"fdiv{r|}p\t{%st(0), $op|$op, st(0)}", (DIV_FPrST0 RST:$op)>;
3260 def : InstAlias<"faddp\t{$op, %st|st, $op}", (ADD_FPrST0 RSTi:$op), 0>;
3261 def : InstAlias<"fmulp\t{$op, %st|st, $op}", (MUL_FPrST0 RSTi:$op), 0>;
3262 def : InstAlias<"fsub{|r}p\t{$op, %st|st, $op}", (SUBR_FPrST0 RSTi:$op), 0>;
3263 def : InstAlias<"fsub{r|}p\t{$op, %st|st, $op}", (SUB_FPrST0 RSTi:$op), 0>;
3264 def : InstAlias<"fdiv{|r}p\t{$op, %st|st, $op}", (DIVR_FPrST0 RSTi:$op), 0>;
3265 def : InstAlias<"fdiv{r|}p\t{$op, %st|st, $op}", (DIV_FPrST0 RSTi:$op), 0>;
32663266
32673267 def : InstAlias<"fnstsw" , (FNSTSW16r), 0>;
32683268
496496 BitVector Reserved(getNumRegs());
497497 const X86FrameLowering *TFI = getFrameLowering(MF);
498498
499 // Set the floating point control register as reserved.
500 Reserved.set(X86::FPCW);
501
499502 // Set the stack-pointer register and its aliases as reserved.
500503 for (MCSubRegIterator I(X86::RSP, this, /*IncludeSelf=*/true); I.isValid();
501504 ++I)
277277 // pseudo registers, but we still mark them as aliasing FP registers. That
278278 // way both kinds can be live without exceeding the stack depth. ST registers
279279 // are only live around inline assembly.
280 def ST0 : X86Reg<"st(0)", 0>, DwarfRegNum<[33, 12, 11]>;
280 def ST0 : X86Reg<"st", 0>, DwarfRegNum<[33, 12, 11]>;
281281 def ST1 : X86Reg<"st(1)", 1>, DwarfRegNum<[34, 13, 12]>;
282282 def ST2 : X86Reg<"st(2)", 2>, DwarfRegNum<[35, 14, 13]>;
283283 def ST3 : X86Reg<"st(3)", 3>, DwarfRegNum<[36, 15, 14]>;
287287 def ST7 : X86Reg<"st(7)", 7>, DwarfRegNum<[40, 19, 18]>;
288288
289289 // Floating-point status word
290 def FPSW : X86Reg<"fpsw", 0>;
290 def FPSW : X86Reg<"fpsr", 0>;
291
292 // Floating-point control word
293 def FPCW : X86Reg<"fpcr", 0>;
291294
292295 // Status flags register.
293296 //
538541 let isAllocatable = 0;
539542 }
540543
544 // Helper to allow %st to print as %st(0) when its encoded in the instruction.
545 def RSTi : RegisterOperand;
546
541547 // Generic vector registers: VR64 and VR128.
542548 // Ensure that float types are declared first - only float is legal on SSE1.
543549 def VR64: RegisterClass<"X86", [x86mmx], 64, (sequence "MM%u", 0, 7)>;
358358 CFI_INSTRUCTION def_cfa_offset 32
359359 LD_F80m $rsp, 1, $noreg, 32, $noreg, implicit-def dead $fpsw
360360 ; CHECK: name: stack_psv
361 ; CHECK: ST_FP80m $rsp, 1, $noreg, 0, $noreg, implicit-def dead $fpsw :: (store 10 into stack, align 16)
362 ST_FP80m $rsp, 1, _, 0, _, implicit-def dead $fpsw :: (store 10 into stack, align 16)
361 ; CHECK: ST_FP80m $rsp, 1, $noreg, 0, $noreg, implicit-def dead $fpsw, implicit $fpcw :: (store 10 into stack, align 16)
362 ST_FP80m $rsp, 1, _, 0, _, implicit-def dead $fpsw, implicit $fpcw :: (store 10 into stack, align 16)
363363 CALL64pcrel32 &cosl, csr_64, implicit $rsp, implicit-def $rsp, implicit-def $fp0
364364 $rsp = ADD64ri8 $rsp, 24, implicit-def dead $eflags
365365 RETQ
4848 ; CHECK-NEXT: fchs
4949 ; CHECK-NEXT: fxch %st(1)
5050 ; CHECK-NEXT: .LBB1_5: # %bb16
51 ; CHECK-NEXT: faddp %st(1)
51 ; CHECK-NEXT: faddp %st, %st(1)
5252 ; CHECK-NEXT: movl %ebp, %esp
5353 ; CHECK-NEXT: popl %ebp
5454 ; CHECK-NEXT: retl
507507 define x86_regcallcc x86_fp80 @test_argRetf80(x86_fp80 %a0) nounwind {
508508 ; X32-LABEL: test_argRetf80:
509509 ; X32: # %bb.0:
510 ; X32-NEXT: fadd %st(0), %st(0)
510 ; X32-NEXT: fadd %st, %st(0)
511511 ; X32-NEXT: retl
512512 ;
513513 ; WIN64-LABEL: test_argRetf80:
514514 ; WIN64: # %bb.0:
515 ; WIN64-NEXT: fadd %st(0), %st(0)
515 ; WIN64-NEXT: fadd %st, %st(0)
516516 ; WIN64-NEXT: retq
517517 ;
518518 ; LINUXOSX64-LABEL: test_argRetf80:
519519 ; LINUXOSX64: # %bb.0:
520 ; LINUXOSX64-NEXT: fadd %st(0), %st(0)
520 ; LINUXOSX64-NEXT: fadd %st, %st(0)
521521 ; LINUXOSX64-NEXT: retq
522522 %r0 = fadd x86_fp80 %a0, %a0
523523 ret x86_fp80 %r0
528528 ; X32-LABEL: test_CallargRetf80:
529529 ; X32: # %bb.0:
530530 ; X32-NEXT: pushl %esp
531 ; X32-NEXT: fadd %st(0), %st(0)
531 ; X32-NEXT: fadd %st, %st(0)
532532 ; X32-NEXT: calll _test_argRetf80
533 ; X32-NEXT: fadd %st(0), %st(0)
533 ; X32-NEXT: fadd %st, %st(0)
534534 ; X32-NEXT: popl %esp
535535 ; X32-NEXT: retl
536536 ;
539539 ; WIN64-NEXT: pushq %rsp
540540 ; WIN64-NEXT: .seh_pushreg 4
541541 ; WIN64-NEXT: .seh_endprologue
542 ; WIN64-NEXT: fadd %st(0), %st(0)
542 ; WIN64-NEXT: fadd %st, %st(0)
543543 ; WIN64-NEXT: callq test_argRetf80
544 ; WIN64-NEXT: fadd %st(0), %st(0)
544 ; WIN64-NEXT: fadd %st, %st(0)
545545 ; WIN64-NEXT: popq %rsp
546546 ; WIN64-NEXT: retq
547547 ; WIN64-NEXT: .seh_handlerdata
553553 ; LINUXOSX64-NEXT: pushq %rsp
554554 ; LINUXOSX64-NEXT: .cfi_def_cfa_offset 16
555555 ; LINUXOSX64-NEXT: .cfi_offset %rsp, -16
556 ; LINUXOSX64-NEXT: fadd %st(0), %st(0)
556 ; LINUXOSX64-NEXT: fadd %st, %st(0)
557557 ; LINUXOSX64-NEXT: callq test_argRetf80
558 ; LINUXOSX64-NEXT: fadd %st(0), %st(0)
558 ; LINUXOSX64-NEXT: fadd %st, %st(0)
559559 ; LINUXOSX64-NEXT: popq %rsp
560560 ; LINUXOSX64-NEXT: .cfi_def_cfa_offset 8
561561 ; LINUXOSX64-NEXT: retq
55 ; Test that we can generate an fcmove, and also that it passes verification.
66
77 ; CHECK-LABEL: cmove_f
8 ; CHECK: fcmove %st({{[0-7]}}), %st(0)
8 ; CHECK: fcmove %st({{[0-7]}}), %st
99 define x86_fp80 @cmove_f(x86_fp80 %a, x86_fp80 %b, i32 %c) {
1010 %test = icmp eq i32 %c, 0
1111 %add = fadd x86_fp80 %a, %b
1919 ; X86-NEXT: flds {{[0-9]+}}(%esp)
2020 ; X86-NEXT: fsqrt
2121 ; X86-NEXT: fld1
22 ; X86-NEXT: fdivp %st(1)
22 ; X86-NEXT: fdivp %st, %st(1)
2323 ; X86-NEXT: retl
2424 %y = call fast float @llvm.sqrt.f32(float %x)
2525 %z = fdiv fast float 1.0, %y
9494 ; X86-NEXT: flds {{[0-9]+}}(%esp)
9595 ; X86-NEXT: fsqrt
9696 ; X86-NEXT: fld1
97 ; X86-NEXT: fdiv %st(1)
97 ; X86-NEXT: fdiv %st(1), %st
9898 ; X86-NEXT: fxch %st(1)
9999 ; X86-NEXT: fstps sqrt1
100100 ; X86-NEXT: retl
485485 ; X64-X87-NEXT: xorl %eax, %eax
486486 ; X64-X87-NEXT: fxch %st(1)
487487 ; X64-X87-NEXT: fucompi %st(2)
488 ; X64-X87-NEXT: fcmovnbe %st(1), %st(0)
488 ; X64-X87-NEXT: fcmovnbe %st(1), %st
489489 ; X64-X87-NEXT: fstp %st(1)
490490 ; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)
491491 ; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx
508508 ; X64-SSSE3-NEXT: xorl %eax, %eax
509509 ; X64-SSSE3-NEXT: fxch %st(1)
510510 ; X64-SSSE3-NEXT: fucompi %st(2)
511 ; X64-SSSE3-NEXT: fcmovnbe %st(1), %st(0)
511 ; X64-SSSE3-NEXT: fcmovnbe %st(1), %st
512512 ; X64-SSSE3-NEXT: fstp %st(1)
513513 ; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)
514514 ; X64-SSSE3-NEXT: setbe %al
567567 ; X64-X87-NEXT: xorl %eax, %eax
568568 ; X64-X87-NEXT: fxch %st(1)
569569 ; X64-X87-NEXT: fucompi %st(2)
570 ; X64-X87-NEXT: fcmovnbe %st(1), %st(0)
570 ; X64-X87-NEXT: fcmovnbe %st(1), %st
571571 ; X64-X87-NEXT: fstp %st(1)
572572 ; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)
573573 ; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx
590590 ; X64-SSSE3-NEXT: xorl %eax, %eax
591591 ; X64-SSSE3-NEXT: fxch %st(1)
592592 ; X64-SSSE3-NEXT: fucompi %st(2)
593 ; X64-SSSE3-NEXT: fcmovnbe %st(1), %st(0)
593 ; X64-SSSE3-NEXT: fcmovnbe %st(1), %st
594594 ; X64-SSSE3-NEXT: fstp %st(1)
595595 ; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)
596596 ; X64-SSSE3-NEXT: setbe %al
0 ; RUN: llc < %s -mtriple=i686 -stop-after=expand-isel-pseudos | FileCheck %s
1
2 ; CHECK: INLINEASM &"", 1, 12, implicit-def early-clobber $df, 12, implicit-def early-clobber $fpsw, 12, implicit-def early-clobber $eflags
3 define void @foo() {
4 entry:
5 call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"()
6 ret void
7 }
7474 ; CHECK-NEXT: fldl {{[0-9]+}}(%esp)
7575 ; CHECK-NEXT: fldl {{[0-9]+}}(%esp)
7676 ; CHECK-NEXT: ## InlineAsm Start
77 ; CHECK-NEXT: foo %st(0) %st(0)
78 ; CHECK-NEXT: ## InlineAsm End
79 ; CHECK-NEXT: fstp %st(0)
80 ; CHECK-NEXT: ## InlineAsm Start
81 ; CHECK-NEXT: bar %st(1) %st(0)
77 ; CHECK-NEXT: foo %st %st
78 ; CHECK-NEXT: ## InlineAsm End
79 ; CHECK-NEXT: fstp %st(0)
80 ; CHECK-NEXT: ## InlineAsm Start
81 ; CHECK-NEXT: bar %st(1) %st
8282 ; CHECK-NEXT: ## InlineAsm End
8383 ; CHECK-NEXT: fstp %st(1)
8484 ; CHECK-NEXT: fstp %st(0)
8585 ; CHECK-NEXT: ## InlineAsm Start
86 ; CHECK-NEXT: baz %st(1) %st(0)
87 ; CHECK-NEXT: ## InlineAsm End
88 ; CHECK-NEXT: fstp %st(0)
89 ; CHECK-NEXT: ## InlineAsm Start
90 ; CHECK-NEXT: baz %st(0)
86 ; CHECK-NEXT: baz %st(1) %st
87 ; CHECK-NEXT: ## InlineAsm End
88 ; CHECK-NEXT: fstp %st(0)
89 ; CHECK-NEXT: ## InlineAsm Start
90 ; CHECK-NEXT: baz %st
9191 ; CHECK-NEXT: ## InlineAsm End
9292 ; CHECK-NEXT: fstp %st(0)
9393 ; CHECK-NEXT: retl
116116 ; CHECK-NEXT: flds LCPI6_0
117117 ; CHECK-NEXT: fld %st(0)
118118 ; CHECK-NEXT: ## InlineAsm Start
119 ; CHECK-NEXT: fistpl %st(0)
120 ; CHECK-NEXT: ## InlineAsm End
121 ; CHECK-NEXT: ## InlineAsm Start
122 ; CHECK-NEXT: fistpl %st(0)
119 ; CHECK-NEXT: fistpl %st
120 ; CHECK-NEXT: ## InlineAsm End
121 ; CHECK-NEXT: ## InlineAsm Start
122 ; CHECK-NEXT: fistpl %st
123123 ; CHECK-NEXT: ## InlineAsm End
124124 ; CHECK-NEXT: retl
125125 return:
137137 ; CHECK: ## %bb.0: ## %return
138138 ; CHECK-NEXT: flds LCPI7_0
139139 ; CHECK-NEXT: ## InlineAsm Start
140 ; CHECK-NEXT: fistl %st(0)
141 ; CHECK-NEXT: ## InlineAsm End
142 ; CHECK-NEXT: ## InlineAsm Start
143 ; CHECK-NEXT: fistpl %st(0)
140 ; CHECK-NEXT: fistl %st
141 ; CHECK-NEXT: ## InlineAsm End
142 ; CHECK-NEXT: ## InlineAsm Start
143 ; CHECK-NEXT: fistpl %st
144144 ; CHECK-NEXT: ## InlineAsm End
145145 ; CHECK-NEXT: retl
146146 return:
162162 ; CHECK-NEXT: fld %st(0)
163163 ; CHECK-NEXT: fxch %st(1)
164164 ; CHECK-NEXT: ## InlineAsm Start
165 ; CHECK-NEXT: fistpl %st(0)
165 ; CHECK-NEXT: fistpl %st
166166 ; CHECK-NEXT: ## InlineAsm End
167167 ; CHECK-NEXT: fstpt (%esp)
168168 ; CHECK-NEXT: calll _test3
190190 ; CHECK-NEXT: calll _test1
191191 ; CHECK-NEXT: fldt {{[0-9]+}}(%esp) ## 10-byte Folded Reload
192192 ; CHECK-NEXT: ## InlineAsm Start
193 ; CHECK-NEXT: fistpl %st(0)
193 ; CHECK-NEXT: fistpl %st
194194 ; CHECK-NEXT: ## InlineAsm End
195195 ; CHECK-NEXT: fstpt (%esp)
196196 ; CHECK-NEXT: calll _test3
210210 ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax
211211 ; CHECK-NEXT: fldt (%eax)
212212 ; CHECK-NEXT: flds LCPI10_0
213 ; CHECK-NEXT: fmul %st(0), %st(1)
213 ; CHECK-NEXT: fmul %st, %st(1)
214214 ; CHECK-NEXT: flds LCPI10_1
215 ; CHECK-NEXT: fmul %st(0), %st(2)
215 ; CHECK-NEXT: fmul %st, %st(2)
216216 ; CHECK-NEXT: fxch %st(2)
217217 ; CHECK-NEXT: ## InlineAsm Start
218 ; CHECK-NEXT: fistpl %st(0)
218 ; CHECK-NEXT: fistpl %st
219219 ; CHECK-NEXT: ## InlineAsm End
220220 ; CHECK-NEXT: fldt (%eax)
221 ; CHECK-NEXT: fmulp %st(1)
222 ; CHECK-NEXT: fmulp %st(1)
223 ; CHECK-NEXT: ## InlineAsm Start
224 ; CHECK-NEXT: fistpl %st(0)
221 ; CHECK-NEXT: fmulp %st, %st(1)
222 ; CHECK-NEXT: fmulp %st, %st(1)
223 ; CHECK-NEXT: ## InlineAsm Start
224 ; CHECK-NEXT: fistpl %st
225225 ; CHECK-NEXT: ## InlineAsm End
226226 ; CHECK-NEXT: retl
227227 entry:
421421 ; CHECK-NEXT: fld %st(0)
422422 ; CHECK-NEXT: fxch %st(1)
423423 ; CHECK-NEXT: ## InlineAsm Start
424 ; CHECK-NEXT: fcomi %st(1), %st(0); pushf; pop %eax
424 ; CHECK-NEXT: fcomi %st(1), %st; pushf; pop %eax
425425 ; CHECK-NEXT: ## InlineAsm End
426426 ; CHECK-NEXT: fstp %st(0)
427427 ; CHECK-NEXT: fstp %st(0)
504504 ; CHECK-LABEL: test_operand_rewrite:
505505 ; CHECK: ## %bb.0: ## %entry
506506 ; CHECK-NEXT: ## InlineAsm Start
507 ; CHECK-NEXT: foo %st(0), %st(1)
508 ; CHECK-NEXT: ## InlineAsm End
509 ; CHECK-NEXT: fsubp %st(1)
507 ; CHECK-NEXT: foo %st, %st(1)
508 ; CHECK-NEXT: ## InlineAsm End
509 ; CHECK-NEXT: fsubp %st, %st(1)
510510 ; CHECK-NEXT: retl
511511 entry:
512512 %0 = tail call { double, double } asm sideeffect "foo $0, $1", "={st},={st(1)},~{dirflag},~{fpsr},~{flags}"()
22 target triple = "x86_64-unknown-unknown"
33 declare void @bar1()
44 define preserve_allcc void @foo()#0 {
5 ; CHECK: foo Clobbered Registers: $cs $df $ds $eflags $eip $eiz $es $fpsw $fs $gs $hip $ip $rip $riz $ss $ssp $bnd0 $bnd1 $bnd2 $bnd3 $cr0 $cr1 $cr2 $cr3 $cr4 $cr5 $cr6 $cr7 $cr8 $cr9 $cr10 $cr11 $cr12 $cr13 $cr14 $cr15 $dr0 $dr1 $dr2 $dr3 $dr4 $dr5 $dr6 $dr7 $dr8 $dr9 $dr10 $dr11 $dr12 $dr13 $dr14 $dr15 $fp0 $fp1 $fp2 $fp3 $fp4 $fp5 $fp6 $fp7 $k0 $k1 $k2 $k3 $k4 $k5 $k6 $k7 $mm0 $mm1 $mm2 $mm3 $mm4 $mm5 $mm6 $mm7 $r11 $st0 $st1 $st2 $st3 $st4 $st5 $st6 $st7 $xmm16 $xmm17 $xmm18 $xmm19 $xmm20 $xmm21 $xmm22 $xmm23 $xmm24 $xmm25 $xmm26 $xmm27 $xmm28 $xmm29 $xmm30 $xmm31 $ymm0 $ymm1 $ymm2 $ymm3 $ymm4 $ymm5 $ymm6 $ymm7 $ymm8 $ymm9 $ymm10 $ymm11 $ymm12 $ymm13 $ymm14 $ymm15 $ymm16 $ymm17 $ymm18 $ymm19 $ymm20 $ymm21 $ymm22 $ymm23 $ymm24 $ymm25 $ymm26 $ymm27 $ymm28 $ymm29 $ymm30 $ymm31 $zmm0 $zmm1 $zmm2 $zmm3 $zmm4 $zmm5 $zmm6 $zmm7 $zmm8 $zmm9 $zmm10 $zmm11 $zmm12 $zmm13 $zmm14 $zmm15 $zmm16 $zmm17 $zmm18 $zmm19 $zmm20 $zmm21 $zmm22 $zmm23 $zmm24 $zmm25 $zmm26 $zmm27 $zmm28 $zmm29 $zmm30 $zmm31 $r11b $r11bh $r11d $r11w $r11wh
5 ; CHECK: foo Clobbered Registers: $cs $df $ds $eflags $eip $eiz $es $fpcw $fpsw $fs $gs $hip $ip $rip $riz $ss $ssp $bnd0 $bnd1 $bnd2 $bnd3 $cr0 $cr1 $cr2 $cr3 $cr4 $cr5 $cr6 $cr7 $cr8 $cr9 $cr10 $cr11 $cr12 $cr13 $cr14 $cr15 $dr0 $dr1 $dr2 $dr3 $dr4 $dr5 $dr6 $dr7 $dr8 $dr9 $dr10 $dr11 $dr12 $dr13 $dr14 $dr15 $fp0 $fp1 $fp2 $fp3 $fp4 $fp5 $fp6 $fp7 $k0 $k1 $k2 $k3 $k4 $k5 $k6 $k7 $mm0 $mm1 $mm2 $mm3 $mm4 $mm5 $mm6 $mm7 $r11 $st0 $st1 $st2 $st3 $st4 $st5 $st6 $st7 $xmm16 $xmm17 $xmm18 $xmm19 $xmm20 $xmm21 $xmm22 $xmm23 $xmm24 $xmm25 $xmm26 $xmm27 $xmm28 $xmm29 $xmm30 $xmm31 $ymm0 $ymm1 $ymm2 $ymm3 $ymm4 $ymm5 $ymm6 $ymm7 $ymm8 $ymm9 $ymm10 $ymm11 $ymm12 $ymm13 $ymm14 $ymm15 $ymm16 $ymm17 $ymm18 $ymm19 $ymm20 $ymm21 $ymm22 $ymm23 $ymm24 $ymm25 $ymm26 $ymm27 $ymm28 $ymm29 $ymm30 $ymm31 $zmm0 $zmm1 $zmm2 $zmm3 $zmm4 $zmm5 $zmm6 $zmm7 $zmm8 $zmm9 $zmm10 $zmm11 $zmm12 $zmm13 $zmm14 $zmm15 $zmm16 $zmm17 $zmm18 $zmm19 $zmm20 $zmm21 $zmm22 $zmm23 $zmm24 $zmm25 $zmm26 $zmm27 $zmm28 $zmm29 $zmm30 $zmm31 $r11b $r11bh $r11d $r11w $r11wh
66 call void @bar1()
77 call void @bar2()
88 ret void
1313 ; CHECK-NEXT: testb $-128, -{{[0-9]+}}(%rsp)
1414 ; CHECK-NEXT: flds {{.*}}(%rip)
1515 ; CHECK-NEXT: flds {{.*}}(%rip)
16 ; CHECK-NEXT: fcmovne %st(1), %st(0)
16 ; CHECK-NEXT: fcmovne %st(1), %st
1717 ; CHECK-NEXT: fstp %st(1)
1818 ; CHECK-NEXT: retq
1919 %1 = tail call x86_fp80 @copysignl(x86_fp80 0xK7FFF8000000000000000, x86_fp80 %a) nounwind readnone
1818 ; KNL-NEXT: fld1
1919 ; KNL-NEXT: fldz
2020 ; KNL-NEXT: fld %st(0)
21 ; KNL-NEXT: fcmovne %st(2), %st(0)
21 ; KNL-NEXT: fcmovne %st(2), %st
2222 ; KNL-NEXT: testb $1, %cl
2323 ; KNL-NEXT: fld %st(1)
24 ; KNL-NEXT: fcmovne %st(3), %st(0)
24 ; KNL-NEXT: fcmovne %st(3), %st
2525 ; KNL-NEXT: kmovw %k2, %eax
2626 ; KNL-NEXT: testb $1, %al
2727 ; KNL-NEXT: fld %st(2)
28 ; KNL-NEXT: fcmovne %st(4), %st(0)
28 ; KNL-NEXT: fcmovne %st(4), %st
2929 ; KNL-NEXT: kmovw %k0, %eax
3030 ; KNL-NEXT: testb $1, %al
3131 ; KNL-NEXT: fxch %st(3)
32 ; KNL-NEXT: fcmovne %st(4), %st(0)
32 ; KNL-NEXT: fcmovne %st(4), %st
3333 ; KNL-NEXT: fstp %st(4)
3434 ; KNL-NEXT: fxch %st(3)
3535 ; KNL-NEXT: fstpt (%rdi)
5454 ; SKX-NEXT: fld1
5555 ; SKX-NEXT: fldz
5656 ; SKX-NEXT: fld %st(0)
57 ; SKX-NEXT: fcmovne %st(2), %st(0)
57 ; SKX-NEXT: fcmovne %st(2), %st
5858 ; SKX-NEXT: testb $1, %cl
5959 ; SKX-NEXT: fld %st(1)
60 ; SKX-NEXT: fcmovne %st(3), %st(0)
60 ; SKX-NEXT: fcmovne %st(3), %st
6161 ; SKX-NEXT: kmovd %k2, %eax
6262 ; SKX-NEXT: testb $1, %al
6363 ; SKX-NEXT: fld %st(2)
64 ; SKX-NEXT: fcmovne %st(4), %st(0)
64 ; SKX-NEXT: fcmovne %st(4), %st
6565 ; SKX-NEXT: kmovd %k0, %eax
6666 ; SKX-NEXT: testb $1, %al
6767 ; SKX-NEXT: fxch %st(3)
68 ; SKX-NEXT: fcmovne %st(4), %st(0)
68 ; SKX-NEXT: fcmovne %st(4), %st
6969 ; SKX-NEXT: fstp %st(4)
7070 ; SKX-NEXT: fxch %st(3)
7171 ; SKX-NEXT: fstpt (%rdi)
2626 ; SSE2-NEXT: movsd %xmm0, -32(%rbp)
2727 ; SSE2-NEXT: fsubl -32(%rbp)
2828 ; SSE2-NEXT: flds {{.*}}(%rip)
29 ; SSE2-NEXT: fmul %st(0), %st(1)
29 ; SSE2-NEXT: fmul %st, %st(1)
3030 ; SSE2-NEXT: fnstcw -2(%rbp)
3131 ; SSE2-NEXT: movzwl -2(%rbp), %eax
3232 ; SSE2-NEXT: movw $3199, -2(%rbp) ## imm = 0xC7F
4040 ; SSE2-NEXT: movsd %xmm0, -56(%rbp)
4141 ; SSE2-NEXT: movsd %xmm0, -24(%rbp)
4242 ; SSE2-NEXT: fsubl -24(%rbp)
43 ; SSE2-NEXT: fmulp %st(1)
43 ; SSE2-NEXT: fmulp %st, %st(1)
4444 ; SSE2-NEXT: fstpl -48(%rbp)
4545 ; SSE2-NEXT: popq %rbp
4646 ; SSE2-NEXT: retq
6464 ; SSE2-SCHEDULE-NEXT: movsd %xmm0, -64(%rbp)
6565 ; SSE2-SCHEDULE-NEXT: movsd %xmm0, -32(%rbp)
6666 ; SSE2-SCHEDULE-NEXT: fsubl -32(%rbp)
67 ; SSE2-SCHEDULE-NEXT: flds {{.*}}(%rip)
6768 ; SSE2-SCHEDULE-NEXT: fnstcw -2(%rbp)
68 ; SSE2-SCHEDULE-NEXT: flds {{.*}}(%rip)
69 ; SSE2-SCHEDULE-NEXT: fmul %st, %st(1)
6970 ; SSE2-SCHEDULE-NEXT: movzwl -2(%rbp), %eax
7071 ; SSE2-SCHEDULE-NEXT: movw $3199, -2(%rbp) ## imm = 0xC7F
7172 ; SSE2-SCHEDULE-NEXT: fldcw -2(%rbp)
72 ; SSE2-SCHEDULE-NEXT: fmul %st(0), %st(1)
7373 ; SSE2-SCHEDULE-NEXT: movw %ax, -2(%rbp)
7474 ; SSE2-SCHEDULE-NEXT: fxch %st(1)
7575 ; SSE2-SCHEDULE-NEXT: fistl -12(%rbp)
7979 ; SSE2-SCHEDULE-NEXT: movsd %xmm0, -56(%rbp)
8080 ; SSE2-SCHEDULE-NEXT: movsd %xmm0, -24(%rbp)
8181 ; SSE2-SCHEDULE-NEXT: fsubl -24(%rbp)
82 ; SSE2-SCHEDULE-NEXT: fmulp %st(1)
82 ; SSE2-SCHEDULE-NEXT: fmulp %st, %st(1)
8383 ; SSE2-SCHEDULE-NEXT: fstpl -48(%rbp)
8484 ; SSE2-SCHEDULE-NEXT: popq %rbp
8585 ; SSE2-SCHEDULE-NEXT: retq
9999 ; SSE3-NEXT: movsd %xmm0, -24(%rbp)
100100 ; SSE3-NEXT: fsubl -24(%rbp)
101101 ; SSE3-NEXT: flds {{.*}}(%rip)
102 ; SSE3-NEXT: fmul %st(0), %st(1)
102 ; SSE3-NEXT: fmul %st, %st(1)
103103 ; SSE3-NEXT: fld %st(1)
104104 ; SSE3-NEXT: fisttpl -8(%rbp)
105105 ; SSE3-NEXT: xorps %xmm0, %xmm0
108108 ; SSE3-NEXT: movsd %xmm0, -16(%rbp)
109109 ; SSE3-NEXT: fxch %st(1)
110110 ; SSE3-NEXT: fsubl -16(%rbp)
111 ; SSE3-NEXT: fmulp %st(1)
111 ; SSE3-NEXT: fmulp %st, %st(1)
112112 ; SSE3-NEXT: fstpl -32(%rbp)
113113 ; SSE3-NEXT: popq %rbp
114114 ; SSE3-NEXT: retq
128128 ; AVX-NEXT: vmovsd %xmm0, -24(%rbp)
129129 ; AVX-NEXT: fsubl -24(%rbp)
130130 ; AVX-NEXT: flds {{.*}}(%rip)
131 ; AVX-NEXT: fmul %st(0), %st(1)
131 ; AVX-NEXT: fmul %st, %st(1)
132132 ; AVX-NEXT: fld %st(1)
133133 ; AVX-NEXT: fisttpl -8(%rbp)
134134 ; AVX-NEXT: vcvtsi2sdl -8(%rbp), %xmm1, %xmm0
136136 ; AVX-NEXT: vmovsd %xmm0, -16(%rbp)
137137 ; AVX-NEXT: fxch %st(1)
138138 ; AVX-NEXT: fsubl -16(%rbp)
139 ; AVX-NEXT: fmulp %st(1)
139 ; AVX-NEXT: fmulp %st, %st(1)
140140 ; AVX-NEXT: fstpl -32(%rbp)
141141 ; AVX-NEXT: popq %rbp
142142 ; AVX-NEXT: retq
1919 ; CHECK-NEXT: fld1
2020 ; CHECK-NEXT: fldz
2121 ; CHECK-NEXT: fld %st(0)
22 ; CHECK-NEXT: fcmove %st(2), %st(0)
22 ; CHECK-NEXT: fcmove %st(2), %st
2323 ; CHECK-NEXT: cmpq %rax, %rsi
2424 ; CHECK-NEXT: fld %st(1)
25 ; CHECK-NEXT: fcmove %st(3), %st(0)
25 ; CHECK-NEXT: fcmove %st(3), %st
2626 ; CHECK-NEXT: cmpq %rdx, %r9
2727 ; CHECK-NEXT: fld %st(2)
28 ; CHECK-NEXT: fcmove %st(4), %st(0)
28 ; CHECK-NEXT: fcmove %st(4), %st
2929 ; CHECK-NEXT: movl $1, %eax
3030 ; CHECK-NEXT: cmpq %r8, %rax
3131 ; CHECK-NEXT: fxch %st(3)
32 ; CHECK-NEXT: fcmove %st(4), %st(0)
32 ; CHECK-NEXT: fcmove %st(4), %st
3333 ; CHECK-NEXT: fstp %st(4)
3434 ; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)
3535 ; CHECK-NEXT: fstpt 70(%rdi)
3939 ; CHECK-NEXT: fstpt 30(%rdi)
4040 ; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)
4141 ; CHECK-NEXT: fstpt 10(%rdi)
42 ; CHECK-NEXT: fadd %st(0), %st(0)
42 ; CHECK-NEXT: fadd %st, %st(0)
4343 ; CHECK-NEXT: fstpt 60(%rdi)
4444 ; CHECK-NEXT: fxch %st(1)
45 ; CHECK-NEXT: fadd %st(0), %st(0)
45 ; CHECK-NEXT: fadd %st, %st(0)
4646 ; CHECK-NEXT: fstpt 40(%rdi)
4747 ; CHECK-NEXT: fxch %st(1)
48 ; CHECK-NEXT: fadd %st(0), %st(0)
48 ; CHECK-NEXT: fadd %st, %st(0)
4949 ; CHECK-NEXT: fstpt 20(%rdi)
50 ; CHECK-NEXT: fadd %st(0), %st(0)
50 ; CHECK-NEXT: fadd %st, %st(0)
5151 ; CHECK-NEXT: fstpt (%rdi)
5252 %1 = icmp eq <4 x i64> , %a
5353 %2 = select <4 x i1> %1, <4 x x86_fp80> , <4 x x86_fp80> zeroinitializer
0 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1 ; RUN: llc < %s -mtriple=x86_64-unknown-linux -mcpu=x86-64 | FileCheck %s
2
3 define x86_fp80 @rem_pio2l_min(x86_fp80 %z) {
4 ; CHECK-LABEL: rem_pio2l_min:
5 ; CHECK: # %bb.0: # %entry
6 ; CHECK-NEXT: fnstcw -{{[0-9]+}}(%rsp)
7 ; CHECK-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax
8 ; CHECK-NEXT: movw $3199, -{{[0-9]+}}(%rsp) # imm = 0xC7F
9 ; CHECK-NEXT: fldcw -{{[0-9]+}}(%rsp)
10 ; CHECK-NEXT: fldt {{[0-9]+}}(%rsp)
11 ; CHECK-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
12 ; CHECK-NEXT: fistl -{{[0-9]+}}(%rsp)
13 ; CHECK-NEXT: fldcw -{{[0-9]+}}(%rsp)
14 ; CHECK-NEXT: movl -{{[0-9]+}}(%rsp), %eax
15 ; CHECK-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
16 ; CHECK-NEXT: fisubl -{{[0-9]+}}(%rsp)
17 ; CHECK-NEXT: flds {{.*}}(%rip)
18 ; CHECK-NEXT: fnstcw -{{[0-9]+}}(%rsp)
19 ; CHECK-NEXT: fmul %st, %st(1)
20 ; CHECK-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax
21 ; CHECK-NEXT: movw $3199, -{{[0-9]+}}(%rsp) # imm = 0xC7F
22 ; CHECK-NEXT: fldcw -{{[0-9]+}}(%rsp)
23 ; CHECK-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
24 ; CHECK-NEXT: fxch %st(1)
25 ; CHECK-NEXT: fistl -{{[0-9]+}}(%rsp)
26 ; CHECK-NEXT: fldcw -{{[0-9]+}}(%rsp)
27 ; CHECK-NEXT: movl -{{[0-9]+}}(%rsp), %eax
28 ; CHECK-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
29 ; CHECK-NEXT: fisubl -{{[0-9]+}}(%rsp)
30 ; CHECK-NEXT: fmulp %st, %st(1)
31 ; CHECK-NEXT: retq
32 entry:
33 %conv = fptosi x86_fp80 %z to i32
34 %conv1 = sitofp i32 %conv to x86_fp80
35 %sub = fsub x86_fp80 %z, %conv1
36 %mul = fmul x86_fp80 %sub, 0xK40178000000000000000
37 %conv2 = fptosi x86_fp80 %mul to i32
38 %conv3 = sitofp i32 %conv2 to x86_fp80
39 %sub4 = fsub x86_fp80 %mul, %conv3
40 %mul5 = fmul x86_fp80 %sub4, 0xK40178000000000000000
41 ret x86_fp80 %mul5
42 }
10271027 ; AVX512_32_WIN-NEXT: xorl %edx, %edx
10281028 ; AVX512_32_WIN-NEXT: fxch %st(1)
10291029 ; AVX512_32_WIN-NEXT: fucompi %st(2)
1030 ; AVX512_32_WIN-NEXT: fcmovnbe %st(1), %st(0)
1030 ; AVX512_32_WIN-NEXT: fcmovnbe %st(1), %st
10311031 ; AVX512_32_WIN-NEXT: fstp %st(1)
10321032 ; AVX512_32_WIN-NEXT: fisttpll (%esp)
10331033 ; AVX512_32_WIN-NEXT: setbe %dl
10481048 ; AVX512_32_LIN-NEXT: xorl %edx, %edx
10491049 ; AVX512_32_LIN-NEXT: fxch %st(1)
10501050 ; AVX512_32_LIN-NEXT: fucompi %st(2)
1051 ; AVX512_32_LIN-NEXT: fcmovnbe %st(1), %st(0)
1051 ; AVX512_32_LIN-NEXT: fcmovnbe %st(1), %st
10521052 ; AVX512_32_LIN-NEXT: fstp %st(1)
10531053 ; AVX512_32_LIN-NEXT: fisttpll (%esp)
10541054 ; AVX512_32_LIN-NEXT: setbe %dl
10681068 ; AVX512_64_WIN-NEXT: xorl %ecx, %ecx
10691069 ; AVX512_64_WIN-NEXT: fxch %st(1)
10701070 ; AVX512_64_WIN-NEXT: fucompi %st(2)
1071 ; AVX512_64_WIN-NEXT: fcmovnbe %st(1), %st(0)
1071 ; AVX512_64_WIN-NEXT: fcmovnbe %st(1), %st
10721072 ; AVX512_64_WIN-NEXT: fstp %st(1)
10731073 ; AVX512_64_WIN-NEXT: fisttpll (%rsp)
10741074 ; AVX512_64_WIN-NEXT: setbe %cl
10891089 ; AVX512_64_LIN-NEXT: xorl %ecx, %ecx
10901090 ; AVX512_64_LIN-NEXT: fxch %st(1)
10911091 ; AVX512_64_LIN-NEXT: fucompi %st(2)
1092 ; AVX512_64_LIN-NEXT: fcmovnbe %st(1), %st(0)
1092 ; AVX512_64_LIN-NEXT: fcmovnbe %st(1), %st
10931093 ; AVX512_64_LIN-NEXT: fstp %st(1)
10941094 ; AVX512_64_LIN-NEXT: fisttpll -{{[0-9]+}}(%rsp)
10951095 ; AVX512_64_LIN-NEXT: setbe %cl
11131113 ; SSE3_32_WIN-NEXT: xorl %edx, %edx
11141114 ; SSE3_32_WIN-NEXT: fxch %st(1)
11151115 ; SSE3_32_WIN-NEXT: fucompi %st(2)
1116 ; SSE3_32_WIN-NEXT: fcmovnbe %st(1), %st(0)
1116 ; SSE3_32_WIN-NEXT: fcmovnbe %st(1), %st
11171117 ; SSE3_32_WIN-NEXT: fstp %st(1)
11181118 ; SSE3_32_WIN-NEXT: fisttpll (%esp)
11191119 ; SSE3_32_WIN-NEXT: setbe %dl
11341134 ; SSE3_32_LIN-NEXT: xorl %edx, %edx
11351135 ; SSE3_32_LIN-NEXT: fxch %st(1)
11361136 ; SSE3_32_LIN-NEXT: fucompi %st(2)
1137 ; SSE3_32_LIN-NEXT: fcmovnbe %st(1), %st(0)
1137 ; SSE3_32_LIN-NEXT: fcmovnbe %st(1), %st
11381138 ; SSE3_32_LIN-NEXT: fstp %st(1)
11391139 ; SSE3_32_LIN-NEXT: fisttpll (%esp)
11401140 ; SSE3_32_LIN-NEXT: setbe %dl
11541154 ; SSE3_64_WIN-NEXT: xorl %eax, %eax
11551155 ; SSE3_64_WIN-NEXT: fxch %st(1)
11561156 ; SSE3_64_WIN-NEXT: fucompi %st(2)
1157 ; SSE3_64_WIN-NEXT: fcmovnbe %st(1), %st(0)
1157 ; SSE3_64_WIN-NEXT: fcmovnbe %st(1), %st
11581158 ; SSE3_64_WIN-NEXT: fstp %st(1)
11591159 ; SSE3_64_WIN-NEXT: fisttpll (%rsp)
11601160 ; SSE3_64_WIN-NEXT: setbe %al
11721172 ; SSE3_64_LIN-NEXT: xorl %eax, %eax
11731173 ; SSE3_64_LIN-NEXT: fxch %st(1)
11741174 ; SSE3_64_LIN-NEXT: fucompi %st(2)
1175 ; SSE3_64_LIN-NEXT: fcmovnbe %st(1), %st(0)
1175 ; SSE3_64_LIN-NEXT: fcmovnbe %st(1), %st
11761176 ; SSE3_64_LIN-NEXT: fstp %st(1)
11771177 ; SSE3_64_LIN-NEXT: fisttpll -{{[0-9]+}}(%rsp)
11781178 ; SSE3_64_LIN-NEXT: setbe %al
11931193 ; SSE2_32_WIN-NEXT: xorl %edx, %edx
11941194 ; SSE2_32_WIN-NEXT: fxch %st(1)
11951195 ; SSE2_32_WIN-NEXT: fucompi %st(2)
1196 ; SSE2_32_WIN-NEXT: fcmovnbe %st(1), %st(0)
1196 ; SSE2_32_WIN-NEXT: fcmovnbe %st(1), %st
11971197 ; SSE2_32_WIN-NEXT: fstp %st(1)
11981198 ; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
11991199 ; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
12201220 ; SSE2_32_LIN-NEXT: xorl %edx, %edx
12211221 ; SSE2_32_LIN-NEXT: fxch %st(1)
12221222 ; SSE2_32_LIN-NEXT: fucompi %st(2)
1223 ; SSE2_32_LIN-NEXT: fcmovnbe %st(1), %st(0)
1223 ; SSE2_32_LIN-NEXT: fcmovnbe %st(1), %st
12241224 ; SSE2_32_LIN-NEXT: fstp %st(1)
12251225 ; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
12261226 ; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
12461246 ; SSE2_64_WIN-NEXT: xorl %eax, %eax
12471247 ; SSE2_64_WIN-NEXT: fxch %st(1)
12481248 ; SSE2_64_WIN-NEXT: fucompi %st(2)
1249 ; SSE2_64_WIN-NEXT: fcmovnbe %st(1), %st(0)
1249 ; SSE2_64_WIN-NEXT: fcmovnbe %st(1), %st
12501250 ; SSE2_64_WIN-NEXT: fstp %st(1)
12511251 ; SSE2_64_WIN-NEXT: fnstcw {{[0-9]+}}(%rsp)
12521252 ; SSE2_64_WIN-NEXT: movzwl {{[0-9]+}}(%rsp), %ecx
12701270 ; SSE2_64_LIN-NEXT: xorl %eax, %eax
12711271 ; SSE2_64_LIN-NEXT: fxch %st(1)
12721272 ; SSE2_64_LIN-NEXT: fucompi %st(2)
1273 ; SSE2_64_LIN-NEXT: fcmovnbe %st(1), %st(0)
1273 ; SSE2_64_LIN-NEXT: fcmovnbe %st(1), %st
12741274 ; SSE2_64_LIN-NEXT: fstp %st(1)
12751275 ; SSE2_64_LIN-NEXT: fnstcw -{{[0-9]+}}(%rsp)
12761276 ; SSE2_64_LIN-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx
292292 ; ATHLON-NEXT: flds 4(%ecx)
293293 ; ATHLON-NEXT: flds (%ecx)
294294 ; ATHLON-NEXT: flds (%eax)
295 ; ATHLON-NEXT: fmul %st(0), %st(0)
295 ; ATHLON-NEXT: fmul %st, %st(0)
296296 ; ATHLON-NEXT: cmpl $0, {{[0-9]+}}(%esp)
297297 ; ATHLON-NEXT: fxch %st(1)
298 ; ATHLON-NEXT: fcmove %st(1), %st(0)
298 ; ATHLON-NEXT: fcmove %st(1), %st
299299 ; ATHLON-NEXT: fstp %st(1)
300300 ; ATHLON-NEXT: flds 4(%eax)
301 ; ATHLON-NEXT: fmul %st(0), %st(0)
301 ; ATHLON-NEXT: fmul %st, %st(0)
302302 ; ATHLON-NEXT: fxch %st(2)
303 ; ATHLON-NEXT: fcmove %st(2), %st(0)
303 ; ATHLON-NEXT: fcmove %st(2), %st
304304 ; ATHLON-NEXT: fstp %st(2)
305305 ; ATHLON-NEXT: flds 8(%eax)
306 ; ATHLON-NEXT: fmul %st(0), %st(0)
306 ; ATHLON-NEXT: fmul %st, %st(0)
307307 ; ATHLON-NEXT: fxch %st(3)
308 ; ATHLON-NEXT: fcmove %st(3), %st(0)
308 ; ATHLON-NEXT: fcmove %st(3), %st
309309 ; ATHLON-NEXT: fstp %st(3)
310310 ; ATHLON-NEXT: flds 12(%eax)
311 ; ATHLON-NEXT: fmul %st(0), %st(0)
311 ; ATHLON-NEXT: fmul %st, %st(0)
312312 ; ATHLON-NEXT: fxch %st(4)
313 ; ATHLON-NEXT: fcmove %st(4), %st(0)
313 ; ATHLON-NEXT: fcmove %st(4), %st
314314 ; ATHLON-NEXT: fstp %st(4)
315315 ; ATHLON-NEXT: fxch %st(3)
316316 ; ATHLON-NEXT: fstps 12(%ecx)
331331 ; MCU-NEXT: flds 4(%ecx)
332332 ; MCU-NEXT: flds 8(%ecx)
333333 ; MCU-NEXT: flds 12(%ecx)
334 ; MCU-NEXT: fmul %st(0), %st(0)
334 ; MCU-NEXT: fmul %st, %st(0)
335335 ; MCU-NEXT: fxch %st(1)
336 ; MCU-NEXT: fmul %st(0), %st(0)
336 ; MCU-NEXT: fmul %st, %st(0)
337337 ; MCU-NEXT: fxch %st(2)
338 ; MCU-NEXT: fmul %st(0), %st(0)
338 ; MCU-NEXT: fmul %st, %st(0)
339339 ; MCU-NEXT: fxch %st(3)
340 ; MCU-NEXT: fmul %st(0), %st(0)
340 ; MCU-NEXT: fmul %st, %st(0)
341341 ; MCU-NEXT: testl %eax, %eax
342342 ; MCU-NEXT: flds (%edx)
343343 ; MCU-NEXT: je .LBB5_2
114114 ; GNU_SINCOS: callq sincosl
115115 ; GNU_SINCOS: fldt 16(%rsp)
116116 ; GNU_SINCOS: fldt 32(%rsp)
117 ; GNU_SINCOS: faddp %st(1)
117 ; GNU_SINCOS: faddp %st, %st(1)
118118
119119 ; GNU_SINCOS_FASTMATH-LABEL: test3:
120120 ; GNU_SINCOS_FASTMATH: callq sincosl
121121 ; GNU_SINCOS_FASTMATH: fldt 16(%{{[re]}}sp)
122122 ; GNU_SINCOS_FASTMATH: fldt 32(%{{[re]}}sp)
123 ; GNU_SINCOS_FASTMATH: faddp %st(1)
123 ; GNU_SINCOS_FASTMATH: faddp %st, %st(1)
124124 %call = tail call x86_fp80 @sinl(x86_fp80 %x) readnone
125125 %call1 = tail call x86_fp80 @cosl(x86_fp80 %x) readnone
126126 %add = fadd x86_fp80 %call, %call1
179179 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
180180 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
181181 ; GENERIC-NEXT: #APP
182 ; GENERIC-NEXT: fadd %st(0), %st(1)
183 ; GENERIC-NEXT: fadd %st(2)
182 ; GENERIC-NEXT: fadd %st, %st(1)
183 ; GENERIC-NEXT: fadd %st(2), %st
184184 ; GENERIC-NEXT: fadds (%ecx)
185185 ; GENERIC-NEXT: faddl (%eax)
186186 ; GENERIC-NEXT: #NO_APP
191191 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
192192 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
193193 ; ATOM-NEXT: #APP
194 ; ATOM-NEXT: fadd %st(0), %st(1) # sched: [5:5.00]
195 ; ATOM-NEXT: fadd %st(2) # sched: [5:5.00]
194 ; ATOM-NEXT: fadd %st, %st(1) # sched: [5:5.00]
195 ; ATOM-NEXT: fadd %st(2), %st # sched: [5:5.00]
196196 ; ATOM-NEXT: fadds (%ecx) # sched: [5:5.00]
197197 ; ATOM-NEXT: faddl (%eax) # sched: [5:5.00]
198198 ; ATOM-NEXT: #NO_APP
203203 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
204204 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
205205 ; SLM-NEXT: #APP
206 ; SLM-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
207 ; SLM-NEXT: fadd %st(2) # sched: [3:1.00]
206 ; SLM-NEXT: fadd %st, %st(1) # sched: [3:1.00]
207 ; SLM-NEXT: fadd %st(2), %st # sched: [3:1.00]
208208 ; SLM-NEXT: fadds (%ecx) # sched: [6:1.00]
209209 ; SLM-NEXT: faddl (%eax) # sched: [6:1.00]
210210 ; SLM-NEXT: #NO_APP
215215 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
216216 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
217217 ; SANDY-NEXT: #APP
218 ; SANDY-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
219 ; SANDY-NEXT: fadd %st(2) # sched: [3:1.00]
218 ; SANDY-NEXT: fadd %st, %st(1) # sched: [3:1.00]
219 ; SANDY-NEXT: fadd %st(2), %st # sched: [3:1.00]
220220 ; SANDY-NEXT: fadds (%ecx) # sched: [10:1.00]
221221 ; SANDY-NEXT: faddl (%eax) # sched: [10:1.00]
222222 ; SANDY-NEXT: #NO_APP
227227 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
228228 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
229229 ; HASWELL-NEXT: #APP
230 ; HASWELL-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
231 ; HASWELL-NEXT: fadd %st(2) # sched: [3:1.00]
230 ; HASWELL-NEXT: fadd %st, %st(1) # sched: [3:1.00]
231 ; HASWELL-NEXT: fadd %st(2), %st # sched: [3:1.00]
232232 ; HASWELL-NEXT: fadds (%ecx) # sched: [10:1.00]
233233 ; HASWELL-NEXT: faddl (%eax) # sched: [10:1.00]
234234 ; HASWELL-NEXT: #NO_APP
239239 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
240240 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
241241 ; BROADWELL-NEXT: #APP
242 ; BROADWELL-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
243 ; BROADWELL-NEXT: fadd %st(2) # sched: [3:1.00]
242 ; BROADWELL-NEXT: fadd %st, %st(1) # sched: [3:1.00]
243 ; BROADWELL-NEXT: fadd %st(2), %st # sched: [3:1.00]
244244 ; BROADWELL-NEXT: fadds (%ecx) # sched: [9:1.00]
245245 ; BROADWELL-NEXT: faddl (%eax) # sched: [9:1.00]
246246 ; BROADWELL-NEXT: #NO_APP
251251 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
252252 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
253253 ; SKYLAKE-NEXT: #APP
254 ; SKYLAKE-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
255 ; SKYLAKE-NEXT: fadd %st(2) # sched: [3:1.00]
254 ; SKYLAKE-NEXT: fadd %st, %st(1) # sched: [3:1.00]
255 ; SKYLAKE-NEXT: fadd %st(2), %st # sched: [3:1.00]
256256 ; SKYLAKE-NEXT: fadds (%ecx) # sched: [10:1.00]
257257 ; SKYLAKE-NEXT: faddl (%eax) # sched: [10:1.00]
258258 ; SKYLAKE-NEXT: #NO_APP
263263 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
264264 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
265265 ; SKX-NEXT: #APP
266 ; SKX-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
267 ; SKX-NEXT: fadd %st(2) # sched: [3:1.00]
266 ; SKX-NEXT: fadd %st, %st(1) # sched: [3:1.00]
267 ; SKX-NEXT: fadd %st(2), %st # sched: [3:1.00]
268268 ; SKX-NEXT: fadds (%ecx) # sched: [10:1.00]
269269 ; SKX-NEXT: faddl (%eax) # sched: [10:1.00]
270270 ; SKX-NEXT: #NO_APP
275275 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
276276 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
277277 ; BDVER2-NEXT: #APP
278 ; BDVER2-NEXT: fadd %st(0), %st(1) # sched: [5:1.00]
279 ; BDVER2-NEXT: fadd %st(2) # sched: [5:1.00]
278 ; BDVER2-NEXT: fadd %st, %st(1) # sched: [5:1.00]
279 ; BDVER2-NEXT: fadd %st(2), %st # sched: [5:1.00]
280280 ; BDVER2-NEXT: fadds (%ecx) # sched: [10:1.00]
281281 ; BDVER2-NEXT: faddl (%eax) # sched: [10:1.00]
282282 ; BDVER2-NEXT: #NO_APP
287287 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
288288 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
289289 ; BTVER2-NEXT: #APP
290 ; BTVER2-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
291 ; BTVER2-NEXT: fadd %st(2) # sched: [3:1.00]
290 ; BTVER2-NEXT: fadd %st, %st(1) # sched: [3:1.00]
291 ; BTVER2-NEXT: fadd %st(2), %st # sched: [3:1.00]
292292 ; BTVER2-NEXT: fadds (%ecx) # sched: [8:1.00]
293293 ; BTVER2-NEXT: faddl (%eax) # sched: [8:1.00]
294294 ; BTVER2-NEXT: #NO_APP
299299 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
300300 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
301301 ; ZNVER1-NEXT: #APP
302 ; ZNVER1-NEXT: fadd %st(0), %st(1) # sched: [3:1.00]
303 ; ZNVER1-NEXT: fadd %st(2) # sched: [3:1.00]
302 ; ZNVER1-NEXT: fadd %st, %st(1) # sched: [3:1.00]
303 ; ZNVER1-NEXT: fadd %st(2), %st # sched: [3:1.00]
304304 ; ZNVER1-NEXT: fadds (%ecx) # sched: [10:1.00]
305305 ; ZNVER1-NEXT: faddl (%eax) # sched: [10:1.00]
306306 ; ZNVER1-NEXT: #NO_APP
315315 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
316316 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
317317 ; GENERIC-NEXT: #APP
318 ; GENERIC-NEXT: faddp %st(1)
319 ; GENERIC-NEXT: faddp %st(2)
318 ; GENERIC-NEXT: faddp %st, %st(1)
319 ; GENERIC-NEXT: faddp %st, %st(2)
320320 ; GENERIC-NEXT: fiadds (%ecx)
321321 ; GENERIC-NEXT: fiaddl (%eax)
322322 ; GENERIC-NEXT: #NO_APP
327327 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
328328 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
329329 ; ATOM-NEXT: #APP
330 ; ATOM-NEXT: faddp %st(1) # sched: [5:5.00]
331 ; ATOM-NEXT: faddp %st(2) # sched: [5:5.00]
330 ; ATOM-NEXT: faddp %st, %st(1) # sched: [5:5.00]
331 ; ATOM-NEXT: faddp %st, %st(2) # sched: [5:5.00]
332332 ; ATOM-NEXT: fiadds (%ecx) # sched: [5:5.00]
333333 ; ATOM-NEXT: fiaddl (%eax) # sched: [5:5.00]
334334 ; ATOM-NEXT: #NO_APP
339339 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
340340 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
341341 ; SLM-NEXT: #APP
342 ; SLM-NEXT: faddp %st(1) # sched: [3:1.00]
343 ; SLM-NEXT: faddp %st(2) # sched: [3:1.00]
342 ; SLM-NEXT: faddp %st, %st(1) # sched: [3:1.00]
343 ; SLM-NEXT: faddp %st, %st(2) # sched: [3:1.00]
344344 ; SLM-NEXT: fiadds (%ecx) # sched: [6:1.00]
345345 ; SLM-NEXT: fiaddl (%eax) # sched: [6:1.00]
346346 ; SLM-NEXT: #NO_APP
351351 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
352352 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
353353 ; SANDY-NEXT: #APP
354 ; SANDY-NEXT: faddp %st(1) # sched: [3:1.00]
355 ; SANDY-NEXT: faddp %st(2) # sched: [3:1.00]
354 ; SANDY-NEXT: faddp %st, %st(1) # sched: [3:1.00]
355 ; SANDY-NEXT: faddp %st, %st(2) # sched: [3:1.00]
356356 ; SANDY-NEXT: fiadds (%ecx) # sched: [13:2.00]
357357 ; SANDY-NEXT: fiaddl (%eax) # sched: [13:2.00]
358358 ; SANDY-NEXT: #NO_APP
363363 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
364364 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
365365 ; HASWELL-NEXT: #APP
366 ; HASWELL-NEXT: faddp %st(1) # sched: [3:1.00]
367 ; HASWELL-NEXT: faddp %st(2) # sched: [3:1.00]
366 ; HASWELL-NEXT: faddp %st, %st(1) # sched: [3:1.00]
367 ; HASWELL-NEXT: faddp %st, %st(2) # sched: [3:1.00]
368368 ; HASWELL-NEXT: fiadds (%ecx) # sched: [13:2.00]
369369 ; HASWELL-NEXT: fiaddl (%eax) # sched: [13:2.00]
370370 ; HASWELL-NEXT: #NO_APP
375375 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
376376 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
377377 ; BROADWELL-NEXT: #APP
378 ; BROADWELL-NEXT: faddp %st(1) # sched: [3:1.00]
379 ; BROADWELL-NEXT: faddp %st(2) # sched: [3:1.00]
378 ; BROADWELL-NEXT: faddp %st, %st(1) # sched: [3:1.00]
379 ; BROADWELL-NEXT: faddp %st, %st(2) # sched: [3:1.00]
380380 ; BROADWELL-NEXT: fiadds (%ecx) # sched: [12:2.00]
381381 ; BROADWELL-NEXT: fiaddl (%eax) # sched: [12:2.00]
382382 ; BROADWELL-NEXT: #NO_APP
387387 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
388388 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
389389 ; SKYLAKE-NEXT: #APP
390 ; SKYLAKE-NEXT: faddp %st(1) # sched: [3:1.00]
391 ; SKYLAKE-NEXT: faddp %st(2) # sched: [3:1.00]
390 ; SKYLAKE-NEXT: faddp %st, %st(1) # sched: [3:1.00]
391 ; SKYLAKE-NEXT: faddp %st, %st(2) # sched: [3:1.00]
392392 ; SKYLAKE-NEXT: fiadds (%ecx) # sched: [13:2.00]
393393 ; SKYLAKE-NEXT: fiaddl (%eax) # sched: [13:2.00]
394394 ; SKYLAKE-NEXT: #NO_APP
399399 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
400400 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
401401 ; SKX-NEXT: #APP
402 ; SKX-NEXT: faddp %st(1) # sched: [3:1.00]
403 ; SKX-NEXT: faddp %st(2) # sched: [3:1.00]
402 ; SKX-NEXT: faddp %st, %st(1) # sched: [3:1.00]
403 ; SKX-NEXT: faddp %st, %st(2) # sched: [3:1.00]
404404 ; SKX-NEXT: fiadds (%ecx) # sched: [13:2.00]
405405 ; SKX-NEXT: fiaddl (%eax) # sched: [13:2.00]
406406 ; SKX-NEXT: #NO_APP
411411 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
412412 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
413413 ; BDVER2-NEXT: #APP
414 ; BDVER2-NEXT: faddp %st(1) # sched: [5:1.00]
415 ; BDVER2-NEXT: faddp %st(2) # sched: [5:1.00]
414 ; BDVER2-NEXT: faddp %st, %st(1) # sched: [5:1.00]
415 ; BDVER2-NEXT: faddp %st, %st(2) # sched: [5:1.00]
416416 ; BDVER2-NEXT: fiadds (%ecx) # sched: [10:1.00]
417417 ; BDVER2-NEXT: fiaddl (%eax) # sched: [10:1.00]
418418 ; BDVER2-NEXT: #NO_APP
423423 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
424424 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
425425 ; BTVER2-NEXT: #APP
426 ; BTVER2-NEXT: faddp %st(1) # sched: [3:1.00]
427 ; BTVER2-NEXT: faddp %st(2) # sched: [3:1.00]
426 ; BTVER2-NEXT: faddp %st, %st(1) # sched: [3:1.00]
427 ; BTVER2-NEXT: faddp %st, %st(2) # sched: [3:1.00]
428428 ; BTVER2-NEXT: fiadds (%ecx) # sched: [8:1.00]
429429 ; BTVER2-NEXT: fiaddl (%eax) # sched: [8:1.00]
430430 ; BTVER2-NEXT: #NO_APP
435435 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
436436 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
437437 ; ZNVER1-NEXT: #APP
438 ; ZNVER1-NEXT: faddp %st(1) # sched: [3:1.00]
439 ; ZNVER1-NEXT: faddp %st(2) # sched: [3:1.00]
438 ; ZNVER1-NEXT: faddp %st, %st(1) # sched: [3:1.00]
439 ; ZNVER1-NEXT: faddp %st, %st(2) # sched: [3:1.00]
440440 ; ZNVER1-NEXT: fiadds (%ecx) # sched: [10:1.00]
441441 ; ZNVER1-NEXT: fiaddl (%eax) # sched: [10:1.00]
442442 ; ZNVER1-NEXT: #NO_APP
806806 ; GENERIC-LABEL: test_fcmov:
807807 ; GENERIC: # %bb.0:
808808 ; GENERIC-NEXT: #APP
809 ; GENERIC-NEXT: fcmovb %st(1), %st(0)
810 ; GENERIC-NEXT: fcmovbe %st(1), %st(0)
811 ; GENERIC-NEXT: fcmove %st(1), %st(0)
812 ; GENERIC-NEXT: fcmovnb %st(1), %st(0)
813 ; GENERIC-NEXT: fcmovnbe %st(1), %st(0)
814 ; GENERIC-NEXT: fcmovne %st(1), %st(0)
815 ; GENERIC-NEXT: fcmovnu %st(1), %st(0)
816 ; GENERIC-NEXT: fcmovu %st(1), %st(0)
809 ; GENERIC-NEXT: fcmovb %st(1), %st
810 ; GENERIC-NEXT: fcmovbe %st(1), %st
811 ; GENERIC-NEXT: fcmove %st(1), %st
812 ; GENERIC-NEXT: fcmovnb %st(1), %st
813 ; GENERIC-NEXT: fcmovnbe %st(1), %st
814 ; GENERIC-NEXT: fcmovne %st(1), %st
815 ; GENERIC-NEXT: fcmovnu %st(1), %st
816 ; GENERIC-NEXT: fcmovu %st(1), %st
817817 ; GENERIC-NEXT: #NO_APP
818818 ; GENERIC-NEXT: retl
819819 ;
820820 ; ATOM-LABEL: test_fcmov:
821821 ; ATOM: # %bb.0:
822822 ; ATOM-NEXT: #APP
823 ; ATOM-NEXT: fcmovb %st(1), %st(0) # sched: [9:4.50]
824 ; ATOM-NEXT: fcmovbe %st(1), %st(0) # sched: [9:4.50]
825 ; ATOM-NEXT: fcmove %st(1), %st(0) # sched: [9:4.50]
826 ; ATOM-NEXT: fcmovnb %st(1), %st(0) # sched: [9:4.50]
827 ; ATOM-NEXT: fcmovnbe %st(1), %st(0) # sched: [9:4.50]
828 ; ATOM-NEXT: fcmovne %st(1), %st(0) # sched: [9:4.50]
829 ; ATOM-NEXT: fcmovnu %st(1), %st(0) # sched: [9:4.50]
830 ; ATOM-NEXT: fcmovu %st(1), %st(0) # sched: [9:4.50]
823 ; ATOM-NEXT: fcmovb %st(1), %st # sched: [9:4.50]
824 ; ATOM-NEXT: fcmovbe %st(1), %st # sched: [9:4.50]
825 ; ATOM-NEXT: fcmove %st(1), %st # sched: [9:4.50]
826 ; ATOM-NEXT: fcmovnb %st(1), %st # sched: [9:4.50]
827 ; ATOM-NEXT: fcmovnbe %st(1), %st # sched: [9:4.50]
828 ; ATOM-NEXT: fcmovne %st(1), %st # sched: [9:4.50]
829 ; ATOM-NEXT: fcmovnu %st(1), %st # sched: [9:4.50]
830 ; ATOM-NEXT: fcmovu %st(1), %st # sched: [9:4.50]
831831 ; ATOM-NEXT: #NO_APP
832832 ; ATOM-NEXT: retl # sched: [79:39.50]
833833 ;
834834 ; SLM-LABEL: test_fcmov:
835835 ; SLM: # %bb.0:
836836 ; SLM-NEXT: #APP
837 ; SLM-NEXT: fcmovb %st(1), %st(0) # sched: [3:1.00]
838 ; SLM-NEXT: fcmovbe %st(1), %st(0) # sched: [3:1.00]
839 ; SLM-NEXT: fcmove %st(1), %st(0) # sched: [3:1.00]
840 ; SLM-NEXT: fcmovnb %st(1), %st(0) # sched: [3:1.00]
841 ; SLM-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:1.00]
842 ; SLM-NEXT: fcmovne %st(1), %st(0) # sched: [3:1.00]
843 ; SLM-NEXT: fcmovnu %st(1), %st(0) # sched: [3:1.00]
844 ; SLM-NEXT: fcmovu %st(1), %st(0) # sched: [3:1.00]
837 ; SLM-NEXT: fcmovb %st(1), %st # sched: [3:1.00]
838 ; SLM-NEXT: fcmovbe %st(1), %st # sched: [3:1.00]
839 ; SLM-NEXT: fcmove %st(1), %st # sched: [3:1.00]
840 ; SLM-NEXT: fcmovnb %st(1), %st # sched: [3:1.00]
841 ; SLM-NEXT: fcmovnbe %st(1), %st # sched: [3:1.00]
842 ; SLM-NEXT: fcmovne %st(1), %st # sched: [3:1.00]
843 ; SLM-NEXT: fcmovnu %st(1), %st # sched: [3:1.00]
844 ; SLM-NEXT: fcmovu %st(1), %st # sched: [3:1.00]
845845 ; SLM-NEXT: #NO_APP
846846 ; SLM-NEXT: retl # sched: [4:1.00]
847847 ;
848848 ; SANDY-LABEL: test_fcmov:
849849 ; SANDY: # %bb.0:
850850 ; SANDY-NEXT: #APP
851 ; SANDY-NEXT: fcmovb %st(1), %st(0) # sched: [3:2.00]
852 ; SANDY-NEXT: fcmovbe %st(1), %st(0) # sched: [3:2.00]
853 ; SANDY-NEXT: fcmove %st(1), %st(0) # sched: [3:2.00]
854 ; SANDY-NEXT: fcmovnb %st(1), %st(0) # sched: [3:2.00]
855 ; SANDY-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:2.00]
856 ; SANDY-NEXT: fcmovne %st(1), %st(0) # sched: [3:2.00]
857 ; SANDY-NEXT: fcmovnu %st(1), %st(0) # sched: [3:2.00]
858 ; SANDY-NEXT: fcmovu %st(1), %st(0) # sched: [3:2.00]
851 ; SANDY-NEXT: fcmovb %st(1), %st # sched: [3:2.00]
852 ; SANDY-NEXT: fcmovbe %st(1), %st # sched: [3:2.00]
853 ; SANDY-NEXT: fcmove %st(1), %st # sched: [3:2.00]
854 ; SANDY-NEXT: fcmovnb %st(1), %st # sched: [3:2.00]
855 ; SANDY-NEXT: fcmovnbe %st(1), %st # sched: [3:2.00]
856 ; SANDY-NEXT: fcmovne %st(1), %st # sched: [3:2.00]
857 ; SANDY-NEXT: fcmovnu %st(1), %st # sched: [3:2.00]
858 ; SANDY-NEXT: fcmovu %st(1), %st # sched: [3:2.00]
859859 ; SANDY-NEXT: #NO_APP
860860 ; SANDY-NEXT: retl # sched: [6:1.00]
861861 ;
862862 ; HASWELL-LABEL: test_fcmov:
863863 ; HASWELL: # %bb.0:
864864 ; HASWELL-NEXT: #APP
865 ; HASWELL-NEXT: fcmovb %st(1), %st(0) # sched: [3:1.00]
866 ; HASWELL-NEXT: fcmovbe %st(1), %st(0) # sched: [3:1.00]
867 ; HASWELL-NEXT: fcmove %st(1), %st(0) # sched: [3:1.00]
868 ; HASWELL-NEXT: fcmovnb %st(1), %st(0) # sched: [3:1.00]
869 ; HASWELL-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:1.00]
870 ; HASWELL-NEXT: fcmovne %st(1), %st(0) # sched: [3:1.00]
871 ; HASWELL-NEXT: fcmovnu %st(1), %st(0) # sched: [3:1.00]
872 ; HASWELL-NEXT: fcmovu %st(1), %st(0) # sched: [3:1.00]
865 ; HASWELL-NEXT: fcmovb %st(1), %st # sched: [3:1.00]
866 ; HASWELL-NEXT: fcmovbe %st(1), %st # sched: [3:1.00]
867 ; HASWELL-NEXT: fcmove %st(1), %st # sched: [3:1.00]
868 ; HASWELL-NEXT: fcmovnb %st(1), %st # sched: [3:1.00]
869 ; HASWELL-NEXT: fcmovnbe %st(1), %st # sched: [3:1.00]
870 ; HASWELL-NEXT: fcmovne %st(1), %st # sched: [3:1.00]
871 ; HASWELL-NEXT: fcmovnu %st(1), %st # sched: [3:1.00]
872 ; HASWELL-NEXT: fcmovu %st(1), %st # sched: [3:1.00]
873873 ; HASWELL-NEXT: #NO_APP
874874 ; HASWELL-NEXT: retl # sched: [7:1.00]
875875 ;
876876 ; BROADWELL-LABEL: test_fcmov:
877877 ; BROADWELL: # %bb.0:
878878 ; BROADWELL-NEXT: #APP
879 ; BROADWELL-NEXT: fcmovb %st(1), %st(0) # sched: [3:1.00]
880 ; BROADWELL-NEXT: fcmovbe %st(1), %st(0) # sched: [3:1.00]
881 ; BROADWELL-NEXT: fcmove %st(1), %st(0) # sched: [3:1.00]
882 ; BROADWELL-NEXT: fcmovnb %st(1), %st(0) # sched: [3:1.00]
883 ; BROADWELL-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:1.00]
884 ; BROADWELL-NEXT: fcmovne %st(1), %st(0) # sched: [3:1.00]
885 ; BROADWELL-NEXT: fcmovnu %st(1), %st(0) # sched: [3:1.00]
886 ; BROADWELL-NEXT: fcmovu %st(1), %st(0) # sched: [3:1.00]
879 ; BROADWELL-NEXT: fcmovb %st(1), %st # sched: [3:1.00]
880 ; BROADWELL-NEXT: fcmovbe %st(1), %st # sched: [3:1.00]
881 ; BROADWELL-NEXT: fcmove %st(1), %st # sched: [3:1.00]
882 ; BROADWELL-NEXT: fcmovnb %st(1), %st # sched: [3:1.00]
883 ; BROADWELL-NEXT: fcmovnbe %st(1), %st # sched: [3:1.00]
884 ; BROADWELL-NEXT: fcmovne %st(1), %st # sched: [3:1.00]
885 ; BROADWELL-NEXT: fcmovnu %st(1), %st # sched: [3:1.00]
886 ; BROADWELL-NEXT: fcmovu %st(1), %st # sched: [3:1.00]
887887 ; BROADWELL-NEXT: #NO_APP
888888 ; BROADWELL-NEXT: retl # sched: [6:0.50]
889889 ;
890890 ; SKYLAKE-LABEL: test_fcmov:
891891 ; SKYLAKE: # %bb.0:
892892 ; SKYLAKE-NEXT: #APP
893 ; SKYLAKE-NEXT: fcmovb %st(1), %st(0) # sched: [3:1.00]
894 ; SKYLAKE-NEXT: fcmovbe %st(1), %st(0) # sched: [3:1.00]
895 ; SKYLAKE-NEXT: fcmove %st(1), %st(0) # sched: [3:1.00]
896 ; SKYLAKE-NEXT: fcmovnb %st(1), %st(0) # sched: [3:1.00]
897 ; SKYLAKE-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:1.00]
898 ; SKYLAKE-NEXT: fcmovne %st(1), %st(0) # sched: [3:1.00]
899 ; SKYLAKE-NEXT: fcmovnu %st(1), %st(0) # sched: [3:1.00]
900 ; SKYLAKE-NEXT: fcmovu %st(1), %st(0) # sched: [3:1.00]
893 ; SKYLAKE-NEXT: fcmovb %st(1), %st # sched: [3:1.00]
894 ; SKYLAKE-NEXT: fcmovbe %st(1), %st # sched: [3:1.00]
895 ; SKYLAKE-NEXT: fcmove %st(1), %st # sched: [3:1.00]
896 ; SKYLAKE-NEXT: fcmovnb %st(1), %st # sched: [3:1.00]
897 ; SKYLAKE-NEXT: fcmovnbe %st(1), %st # sched: [3:1.00]
898 ; SKYLAKE-NEXT: fcmovne %st(1), %st # sched: [3:1.00]
899 ; SKYLAKE-NEXT: fcmovnu %st(1), %st # sched: [3:1.00]
900 ; SKYLAKE-NEXT: fcmovu %st(1), %st # sched: [3:1.00]
901901 ; SKYLAKE-NEXT: #NO_APP
902902 ; SKYLAKE-NEXT: retl # sched: [6:0.50]
903903 ;
904904 ; SKX-LABEL: test_fcmov:
905905 ; SKX: # %bb.0:
906906 ; SKX-NEXT: #APP
907 ; SKX-NEXT: fcmovb %st(1), %st(0) # sched: [3:1.00]
908 ; SKX-NEXT: fcmovbe %st(1), %st(0) # sched: [3:1.00]
909 ; SKX-NEXT: fcmove %st(1), %st(0) # sched: [3:1.00]
910 ; SKX-NEXT: fcmovnb %st(1), %st(0) # sched: [3:1.00]
911 ; SKX-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:1.00]
912 ; SKX-NEXT: fcmovne %st(1), %st(0) # sched: [3:1.00]
913 ; SKX-NEXT: fcmovnu %st(1), %st(0) # sched: [3:1.00]
914 ; SKX-NEXT: fcmovu %st(1), %st(0) # sched: [3:1.00]
907 ; SKX-NEXT: fcmovb %st(1), %st # sched: [3:1.00]
908 ; SKX-NEXT: fcmovbe %st(1), %st # sched: [3:1.00]
909 ; SKX-NEXT: fcmove %st(1), %st # sched: [3:1.00]
910 ; SKX-NEXT: fcmovnb %st(1), %st # sched: [3:1.00]
911 ; SKX-NEXT: fcmovnbe %st(1), %st # sched: [3:1.00]
912 ; SKX-NEXT: fcmovne %st(1), %st # sched: [3:1.00]
913 ; SKX-NEXT: fcmovnu %st(1), %st # sched: [3:1.00]
914 ; SKX-NEXT: fcmovu %st(1), %st # sched: [3:1.00]
915915 ; SKX-NEXT: #NO_APP
916916 ; SKX-NEXT: retl # sched: [6:0.50]
917917 ;
918918 ; BDVER2-LABEL: test_fcmov:
919919 ; BDVER2: # %bb.0:
920920 ; BDVER2-NEXT: #APP
921 ; BDVER2-NEXT: fcmovb %st(1), %st(0) # sched: [1:1.00]
922 ; BDVER2-NEXT: fcmovbe %st(1), %st(0) # sched: [1:1.00]
923 ; BDVER2-NEXT: fcmove %st(1), %st(0) # sched: [1:1.00]
924 ; BDVER2-NEXT: fcmovnb %st(1), %st(0) # sched: [1:1.00]
925 ; BDVER2-NEXT: fcmovnbe %st(1), %st(0) # sched: [1:1.00]
926 ; BDVER2-NEXT: fcmovne %st(1), %st(0) # sched: [1:1.00]
927 ; BDVER2-NEXT: fcmovnu %st(1), %st(0) # sched: [1:1.00]
928 ; BDVER2-NEXT: fcmovu %st(1), %st(0) # sched: [1:1.00]
921 ; BDVER2-NEXT: fcmovb %st(1), %st # sched: [1:1.00]
922 ; BDVER2-NEXT: fcmovbe %st(1), %st # sched: [1:1.00]
923 ; BDVER2-NEXT: fcmove %st(1), %st # sched: [1:1.00]
924 ; BDVER2-NEXT: fcmovnb %st(1), %st # sched: [1:1.00]
925 ; BDVER2-NEXT: fcmovnbe %st(1), %st # sched: [1:1.00]
926 ; BDVER2-NEXT: fcmovne %st(1), %st # sched: [1:1.00]
927 ; BDVER2-NEXT: fcmovnu %st(1), %st # sched: [1:1.00]
928 ; BDVER2-NEXT: fcmovu %st(1), %st # sched: [1:1.00]
929929 ; BDVER2-NEXT: #NO_APP
930930 ; BDVER2-NEXT: retl # sched: [5:1.00]
931931 ;
932932 ; BTVER2-LABEL: test_fcmov:
933933 ; BTVER2: # %bb.0:
934934 ; BTVER2-NEXT: #APP
935 ; BTVER2-NEXT: fcmovb %st(1), %st(0) # sched: [3:1.00]
936 ; BTVER2-NEXT: fcmovbe %st(1), %st(0) # sched: [3:1.00]
937 ; BTVER2-NEXT: fcmove %st(1), %st(0) # sched: [3:1.00]
938 ; BTVER2-NEXT: fcmovnb %st(1), %st(0) # sched: [3:1.00]
939 ; BTVER2-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:1.00]
940 ; BTVER2-NEXT: fcmovne %st(1), %st(0) # sched: [3:1.00]
941 ; BTVER2-NEXT: fcmovnu %st(1), %st(0) # sched: [3:1.00]
942 ; BTVER2-NEXT: fcmovu %st(1), %st(0) # sched: [3:1.00]
935 ; BTVER2-NEXT: fcmovb %st(1), %st # sched: [3:1.00]
936 ; BTVER2-NEXT: fcmovbe %st(1), %st # sched: [3:1.00]
937 ; BTVER2-NEXT: fcmove %st(1), %st # sched: [3:1.00]
938 ; BTVER2-NEXT: fcmovnb %st(1), %st # sched: [3:1.00]
939 ; BTVER2-NEXT: fcmovnbe %st(1), %st # sched: [3:1.00]
940 ; BTVER2-NEXT: fcmovne %st(1), %st # sched: [3:1.00]
941 ; BTVER2-NEXT: fcmovnu %st(1), %st # sched: [3:1.00]
942 ; BTVER2-NEXT: fcmovu %st(1), %st # sched: [3:1.00]
943943 ; BTVER2-NEXT: #NO_APP
944944 ; BTVER2-NEXT: retl # sched: [4:1.00]
945945 ;
946946 ; ZNVER1-LABEL: test_fcmov:
947947 ; ZNVER1: # %bb.0:
948948 ; ZNVER1-NEXT: #APP
949 ; ZNVER1-NEXT: fcmovb %st(1), %st(0) # sched: [100:0.25]
950 ; ZNVER1-NEXT: fcmovbe %st(1), %st(0) # sched: [100:0.25]
951 ; ZNVER1-NEXT: fcmove %st(1), %st(0) # sched: [100:0.25]
952 ; ZNVER1-NEXT: fcmovnb %st(1), %st(0) # sched: [100:0.25]
953 ; ZNVER1-NEXT: fcmovnbe %st(1), %st(0) # sched: [100:0.25]
954 ; ZNVER1-NEXT: fcmovne %st(1), %st(0) # sched: [100:0.25]
955 ; ZNVER1-NEXT: fcmovnu %st(1), %st(0) # sched: [100:0.25]
956 ; ZNVER1-NEXT: fcmovu %st(1), %st(0) # sched: [100:0.25]
949 ; ZNVER1-NEXT: fcmovb %st(1), %st # sched: [100:0.25]
950 ; ZNVER1-NEXT: fcmovbe %st(1), %st # sched: [100:0.25]
951 ; ZNVER1-NEXT: fcmove %st(1), %st # sched: [100:0.25]
952 ; ZNVER1-NEXT: fcmovnb %st(1), %st # sched: [100:0.25]
953 ; ZNVER1-NEXT: fcmovnbe %st(1), %st # sched: [100:0.25]
954 ; ZNVER1-NEXT: fcmovne %st(1), %st # sched: [100:0.25]
955 ; ZNVER1-NEXT: fcmovnu %st(1), %st # sched: [100:0.25]
956 ; ZNVER1-NEXT: fcmovu %st(1), %st # sched: [100:0.25]
957957 ; ZNVER1-NEXT: #NO_APP
958958 ; ZNVER1-NEXT: retl # sched: [1:0.50]
959959 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
12471247 ; GENERIC-LABEL: test_fcomi_fcomip:
12481248 ; GENERIC: # %bb.0:
12491249 ; GENERIC-NEXT: #APP
1250 ; GENERIC-NEXT: fcomi %st(3)
1251 ; GENERIC-NEXT: fcompi %st(3)
1250 ; GENERIC-NEXT: fcomi %st(3), %st
1251 ; GENERIC-NEXT: fcompi %st(3), %st
12521252 ; GENERIC-NEXT: #NO_APP
12531253 ; GENERIC-NEXT: retl
12541254 ;
12551255 ; ATOM-LABEL: test_fcomi_fcomip:
12561256 ; ATOM: # %bb.0:
12571257 ; ATOM-NEXT: #APP
1258 ; ATOM-NEXT: fcomi %st(3) # sched: [9:4.50]
1259 ; ATOM-NEXT: fcompi %st(3) # sched: [9:4.50]
1258 ; ATOM-NEXT: fcomi %st(3), %st # sched: [9:4.50]
1259 ; ATOM-NEXT: fcompi %st(3), %st # sched: [9:4.50]
12601260 ; ATOM-NEXT: #NO_APP
12611261 ; ATOM-NEXT: retl # sched: [79:39.50]
12621262 ;
12631263 ; SLM-LABEL: test_fcomi_fcomip:
12641264 ; SLM: # %bb.0:
12651265 ; SLM-NEXT: #APP
1266 ; SLM-NEXT: fcomi %st(3) # sched: [3:1.00]
1267 ; SLM-NEXT: fcompi %st(3) # sched: [3:1.00]
1266 ; SLM-NEXT: fcomi %st(3), %st # sched: [3:1.00]
1267 ; SLM-NEXT: fcompi %st(3), %st # sched: [3:1.00]
12681268 ; SLM-NEXT: #NO_APP
12691269 ; SLM-NEXT: retl # sched: [4:1.00]
12701270 ;
12711271 ; SANDY-LABEL: test_fcomi_fcomip:
12721272 ; SANDY: # %bb.0:
12731273 ; SANDY-NEXT: #APP
1274 ; SANDY-NEXT: fcomi %st(3) # sched: [3:1.00]
1275 ; SANDY-NEXT: fcompi %st(3) # sched: [3:1.00]
1274 ; SANDY-NEXT: fcomi %st(3), %st # sched: [3:1.00]
1275 ; SANDY-NEXT: fcompi %st(3), %st # sched: [3:1.00]
12761276 ; SANDY-NEXT: #NO_APP
12771277 ; SANDY-NEXT: retl # sched: [6:1.00]
12781278 ;
12791279 ; HASWELL-LABEL: test_fcomi_fcomip:
12801280 ; HASWELL: # %bb.0:
12811281 ; HASWELL-NEXT: #APP
1282 ; HASWELL-NEXT: fcomi %st(3) # sched: [1:0.50]
1283 ; HASWELL-NEXT: fcompi %st(3) # sched: [1:0.50]
1282 ; HASWELL-NEXT: fcomi %st(3), %st # sched: [1:0.50]
1283 ; HASWELL-NEXT: fcompi %st(3), %st # sched: [1:0.50]
12841284 ; HASWELL-NEXT: #NO_APP
12851285 ; HASWELL-NEXT: retl # sched: [7:1.00]
12861286 ;
12871287 ; BROADWELL-LABEL: test_fcomi_fcomip:
12881288 ; BROADWELL: # %bb.0:
12891289 ; BROADWELL-NEXT: #APP
1290 ; BROADWELL-NEXT: fcomi %st(3) # sched: [3:1.00]
1291 ; BROADWELL-NEXT: fcompi %st(3) # sched: [3:1.00]
1290 ; BROADWELL-NEXT: fcomi %st(3), %st # sched: [3:1.00]
1291 ; BROADWELL-NEXT: fcompi %st(3), %st # sched: [3:1.00]
12921292 ; BROADWELL-NEXT: #NO_APP
12931293 ; BROADWELL-NEXT: retl # sched: [6:0.50]
12941294 ;
12951295 ; SKYLAKE-LABEL: test_fcomi_fcomip:
12961296 ; SKYLAKE: # %bb.0:
12971297 ; SKYLAKE-NEXT: #APP
1298 ; SKYLAKE-NEXT: fcomi %st(3) # sched: [2:1.00]
1299 ; SKYLAKE-NEXT: fcompi %st(3) # sched: [2:1.00]
1298 ; SKYLAKE-NEXT: fcomi %st(3), %st # sched: [2:1.00]
1299 ; SKYLAKE-NEXT: fcompi %st(3), %st # sched: [2:1.00]
13001300 ; SKYLAKE-NEXT: #NO_APP
13011301 ; SKYLAKE-NEXT: retl # sched: [6:0.50]
13021302 ;
13031303 ; SKX-LABEL: test_fcomi_fcomip:
13041304 ; SKX: # %bb.0:
13051305 ; SKX-NEXT: #APP
1306 ; SKX-NEXT: fcomi %st(3) # sched: [2:1.00]
1307 ; SKX-NEXT: fcompi %st(3) # sched: [2:1.00]
1306 ; SKX-NEXT: fcomi %st(3), %st # sched: [2:1.00]
1307 ; SKX-NEXT: fcompi %st(3), %st # sched: [2:1.00]
13081308 ; SKX-NEXT: #NO_APP
13091309 ; SKX-NEXT: retl # sched: [6:0.50]
13101310 ;
13111311 ; BDVER2-LABEL: test_fcomi_fcomip:
13121312 ; BDVER2: # %bb.0:
13131313 ; BDVER2-NEXT: #APP
1314 ; BDVER2-NEXT: fcomi %st(3) # sched: [1:1.00]
1315 ; BDVER2-NEXT: fcompi %st(3) # sched: [1:1.00]
1314 ; BDVER2-NEXT: fcomi %st(3), %st # sched: [1:1.00]
1315 ; BDVER2-NEXT: fcompi %st(3), %st # sched: [1:1.00]
13161316 ; BDVER2-NEXT: #NO_APP
13171317 ; BDVER2-NEXT: retl # sched: [5:1.00]
13181318 ;
13191319 ; BTVER2-LABEL: test_fcomi_fcomip:
13201320 ; BTVER2: # %bb.0:
13211321 ; BTVER2-NEXT: #APP
1322 ; BTVER2-NEXT: fcomi %st(3) # sched: [3:1.00]
1323 ; BTVER2-NEXT: fcompi %st(3) # sched: [3:1.00]
1322 ; BTVER2-NEXT: fcomi %st(3), %st # sched: [3:1.00]
1323 ; BTVER2-NEXT: fcompi %st(3), %st # sched: [3:1.00]
13241324 ; BTVER2-NEXT: #NO_APP
13251325 ; BTVER2-NEXT: retl # sched: [4:1.00]
13261326 ;
13271327 ; ZNVER1-LABEL: test_fcomi_fcomip:
13281328 ; ZNVER1: # %bb.0:
13291329 ; ZNVER1-NEXT: #APP
1330 ; ZNVER1-NEXT: fcomi %st(3) # sched: [9:0.50]
1331 ; ZNVER1-NEXT: fcompi %st(3) # sched: [9:0.50]
1330 ; ZNVER1-NEXT: fcomi %st(3), %st # sched: [9:0.50]
1331 ; ZNVER1-NEXT: fcompi %st(3), %st # sched: [9:0.50]
13321332 ; ZNVER1-NEXT: #NO_APP
13331333 ; ZNVER1-NEXT: retl # sched: [1:0.50]
13341334 tail call void asm sideeffect "fcomi %st(3) \0A\09 fcomip %st(3)", ""() nounwind
15031503 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
15041504 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
15051505 ; GENERIC-NEXT: #APP
1506 ; GENERIC-NEXT: fdiv %st(0), %st(1)
1507 ; GENERIC-NEXT: fdiv %st(2)
1506 ; GENERIC-NEXT: fdiv %st, %st(1)
1507 ; GENERIC-NEXT: fdiv %st(2), %st
15081508 ; GENERIC-NEXT: fdivs (%ecx)
15091509 ; GENERIC-NEXT: fdivl (%eax)
15101510 ; GENERIC-NEXT: #NO_APP
15151515 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
15161516 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
15171517 ; ATOM-NEXT: #APP
1518 ; ATOM-NEXT: fdiv %st(0), %st(1) # sched: [34:17.00]
1519 ; ATOM-NEXT: fdiv %st(2) # sched: [34:17.00]
1518 ; ATOM-NEXT: fdiv %st, %st(1) # sched: [34:17.00]
1519 ; ATOM-NEXT: fdiv %st(2), %st # sched: [34:17.00]
15201520 ; ATOM-NEXT: fdivs (%ecx) # sched: [34:17.00]
15211521 ; ATOM-NEXT: fdivl (%eax) # sched: [34:17.00]
15221522 ; ATOM-NEXT: #NO_APP
15271527 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
15281528 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
15291529 ; SLM-NEXT: #APP
1530 ; SLM-NEXT: fdiv %st(0), %st(1) # sched: [19:17.00]
1531 ; SLM-NEXT: fdiv %st(2) # sched: [19:17.00]
1530 ; SLM-NEXT: fdiv %st, %st(1) # sched: [19:17.00]
1531 ; SLM-NEXT: fdiv %st(2), %st # sched: [19:17.00]
15321532 ; SLM-NEXT: fdivs (%ecx) # sched: [22:17.00]
15331533 ; SLM-NEXT: fdivl (%eax) # sched: [22:17.00]
15341534 ; SLM-NEXT: #NO_APP
15391539 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
15401540 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
15411541 ; SANDY-NEXT: #APP
1542 ; SANDY-NEXT: fdiv %st(0), %st(1) # sched: [14:14.00]
1543 ; SANDY-NEXT: fdiv %st(2) # sched: [14:14.00]
1542 ; SANDY-NEXT: fdiv %st, %st(1) # sched: [14:14.00]
1543 ; SANDY-NEXT: fdiv %st(2), %st # sched: [14:14.00]
15441544 ; SANDY-NEXT: fdivs (%ecx) # sched: [31:1.00]
15451545 ; SANDY-NEXT: fdivl (%eax) # sched: [31:1.00]
15461546 ; SANDY-NEXT: #NO_APP
15511551 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
15521552 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
15531553 ; HASWELL-NEXT: #APP
1554 ; HASWELL-NEXT: fdiv %st(0), %st(1) # sched: [24:1.00]
1555 ; HASWELL-NEXT: fdiv %st(2) # sched: [20:1.00]
1554 ; HASWELL-NEXT: fdiv %st, %st(1) # sched: [24:1.00]
1555 ; HASWELL-NEXT: fdiv %st(2), %st # sched: [20:1.00]
15561556 ; HASWELL-NEXT: fdivs (%ecx) # sched: [31:1.00]
15571557 ; HASWELL-NEXT: fdivl (%eax) # sched: [31:1.00]
15581558 ; HASWELL-NEXT: #NO_APP
15631563 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
15641564 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
15651565 ; BROADWELL-NEXT: #APP
1566 ; BROADWELL-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00]
1567 ; BROADWELL-NEXT: fdiv %st(2) # sched: [20:1.00]
1566 ; BROADWELL-NEXT: fdiv %st, %st(1) # sched: [15:1.00]
1567 ; BROADWELL-NEXT: fdiv %st(2), %st # sched: [20:1.00]
15681568 ; BROADWELL-NEXT: fdivs (%ecx) # sched: [21:1.00]
15691569 ; BROADWELL-NEXT: fdivl (%eax) # sched: [21:1.00]
15701570 ; BROADWELL-NEXT: #NO_APP
15751575 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
15761576 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
15771577 ; SKYLAKE-NEXT: #APP
1578 ; SKYLAKE-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00]
1579 ; SKYLAKE-NEXT: fdiv %st(2) # sched: [20:1.00]
1578 ; SKYLAKE-NEXT: fdiv %st, %st(1) # sched: [15:1.00]
1579 ; SKYLAKE-NEXT: fdiv %st(2), %st # sched: [20:1.00]
15801580 ; SKYLAKE-NEXT: fdivs (%ecx) # sched: [22:1.00]
15811581 ; SKYLAKE-NEXT: fdivl (%eax) # sched: [22:1.00]
15821582 ; SKYLAKE-NEXT: #NO_APP
15871587 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
15881588 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
15891589 ; SKX-NEXT: #APP
1590 ; SKX-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00]
1591 ; SKX-NEXT: fdiv %st(2) # sched: [20:1.00]
1590 ; SKX-NEXT: fdiv %st, %st(1) # sched: [15:1.00]
1591 ; SKX-NEXT: fdiv %st(2), %st # sched: [20:1.00]
15921592 ; SKX-NEXT: fdivs (%ecx) # sched: [22:1.00]
15931593 ; SKX-NEXT: fdivl (%eax) # sched: [22:1.00]
15941594 ; SKX-NEXT: #NO_APP
15991599 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
16001600 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
16011601 ; BDVER2-NEXT: #APP
1602 ; BDVER2-NEXT: fdiv %st(0), %st(1) # sched: [9:9.50]
1603 ; BDVER2-NEXT: fdiv %st(2) # sched: [9:9.50]
1602 ; BDVER2-NEXT: fdiv %st, %st(1) # sched: [9:9.50]
1603 ; BDVER2-NEXT: fdiv %st(2), %st # sched: [9:9.50]
16041604 ; BDVER2-NEXT: fdivs (%ecx) # sched: [14:9.50]
16051605 ; BDVER2-NEXT: fdivl (%eax) # sched: [14:9.50]
16061606 ; BDVER2-NEXT: #NO_APP
16111611 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
16121612 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
16131613 ; BTVER2-NEXT: #APP
1614 ; BTVER2-NEXT: fdiv %st(0), %st(1) # sched: [19:19.00]
1615 ; BTVER2-NEXT: fdiv %st(2) # sched: [19:19.00]
1614 ; BTVER2-NEXT: fdiv %st, %st(1) # sched: [19:19.00]
1615 ; BTVER2-NEXT: fdiv %st(2), %st # sched: [19:19.00]
16161616 ; BTVER2-NEXT: fdivs (%ecx) # sched: [24:19.00]
16171617 ; BTVER2-NEXT: fdivl (%eax) # sched: [24:19.00]
16181618 ; BTVER2-NEXT: #NO_APP
16231623 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
16241624 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
16251625 ; ZNVER1-NEXT: #APP
1626 ; ZNVER1-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00]
1627 ; ZNVER1-NEXT: fdiv %st(2) # sched: [15:1.00]
1626 ; ZNVER1-NEXT: fdiv %st, %st(1) # sched: [15:1.00]
1627 ; ZNVER1-NEXT: fdiv %st(2), %st # sched: [15:1.00]
16281628 ; ZNVER1-NEXT: fdivs (%ecx) # sched: [22:1.00]
16291629 ; ZNVER1-NEXT: fdivl (%eax) # sched: [22:1.00]
16301630 ; ZNVER1-NEXT: #NO_APP
16391639 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
16401640 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
16411641 ; GENERIC-NEXT: #APP
1642 ; GENERIC-NEXT: fdivp %st(1)
1643 ; GENERIC-NEXT: fdivp %st(2)
1642 ; GENERIC-NEXT: fdivp %st, %st(1)
1643 ; GENERIC-NEXT: fdivp %st, %st(2)
16441644 ; GENERIC-NEXT: fidivs (%ecx)
16451645 ; GENERIC-NEXT: fidivl (%eax)
16461646 ; GENERIC-NEXT: #NO_APP
16511651 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
16521652 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
16531653 ; ATOM-NEXT: #APP
1654 ; ATOM-NEXT: fdivp %st(1) # sched: [34:17.00]
1655 ; ATOM-NEXT: fdivp %st(2) # sched: [34:17.00]
1654 ; ATOM-NEXT: fdivp %st, %st(1) # sched: [34:17.00]
1655 ; ATOM-NEXT: fdivp %st, %st(2) # sched: [34:17.00]
16561656 ; ATOM-NEXT: fidivs (%ecx) # sched: [34:17.00]
16571657 ; ATOM-NEXT: fidivl (%eax) # sched: [34:17.00]
16581658 ; ATOM-NEXT: #NO_APP
16631663 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
16641664 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
16651665 ; SLM-NEXT: #APP
1666 ; SLM-NEXT: fdivp %st(1) # sched: [19:17.00]
1667 ; SLM-NEXT: fdivp %st(2) # sched: [19:17.00]
1666 ; SLM-NEXT: fdivp %st, %st(1) # sched: [19:17.00]
1667 ; SLM-NEXT: fdivp %st, %st(2) # sched: [19:17.00]
16681668 ; SLM-NEXT: fidivs (%ecx) # sched: [22:17.00]
16691669 ; SLM-NEXT: fidivl (%eax) # sched: [22:17.00]
16701670 ; SLM-NEXT: #NO_APP
16751675 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
16761676 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
16771677 ; SANDY-NEXT: #APP
1678 ; SANDY-NEXT: fdivp %st(1) # sched: [14:14.00]
1679 ; SANDY-NEXT: fdivp %st(2) # sched: [14:14.00]
1678 ; SANDY-NEXT: fdivp %st, %st(1) # sched: [14:14.00]
1679 ; SANDY-NEXT: fdivp %st, %st(2) # sched: [14:14.00]
16801680 ; SANDY-NEXT: fidivs (%ecx) # sched: [34:1.00]
16811681 ; SANDY-NEXT: fidivl (%eax) # sched: [34:1.00]
16821682 ; SANDY-NEXT: #NO_APP
16871687 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
16881688 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
16891689 ; HASWELL-NEXT: #APP
1690 ; HASWELL-NEXT: fdivp %st(1) # sched: [24:1.00]
1691 ; HASWELL-NEXT: fdivp %st(2) # sched: [24:1.00]
1690 ; HASWELL-NEXT: fdivp %st, %st(1) # sched: [24:1.00]
1691 ; HASWELL-NEXT: fdivp %st, %st(2) # sched: [24:1.00]
16921692 ; HASWELL-NEXT: fidivs (%ecx) # sched: [34:1.00]
16931693 ; HASWELL-NEXT: fidivl (%eax) # sched: [34:1.00]
16941694 ; HASWELL-NEXT: #NO_APP
16991699 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
17001700 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
17011701 ; BROADWELL-NEXT: #APP
1702 ; BROADWELL-NEXT: fdivp %st(1) # sched: [15:1.00]
1703 ; BROADWELL-NEXT: fdivp %st(2) # sched: [15:1.00]
1702 ; BROADWELL-NEXT: fdivp %st, %st(1) # sched: [15:1.00]
1703 ; BROADWELL-NEXT: fdivp %st, %st(2) # sched: [15:1.00]
17041704 ; BROADWELL-NEXT: fidivs (%ecx) # sched: [24:1.00]
17051705 ; BROADWELL-NEXT: fidivl (%eax) # sched: [24:1.00]
17061706 ; BROADWELL-NEXT: #NO_APP
17111711 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
17121712 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
17131713 ; SKYLAKE-NEXT: #APP
1714 ; SKYLAKE-NEXT: fdivp %st(1) # sched: [15:1.00]
1715 ; SKYLAKE-NEXT: fdivp %st(2) # sched: [15:1.00]
1714 ; SKYLAKE-NEXT: fdivp %st, %st(1) # sched: [15:1.00]
1715 ; SKYLAKE-NEXT: fdivp %st, %st(2) # sched: [15:1.00]
17161716 ; SKYLAKE-NEXT: fidivs (%ecx) # sched: [25:1.00]
17171717 ; SKYLAKE-NEXT: fidivl (%eax) # sched: [25:1.00]
17181718 ; SKYLAKE-NEXT: #NO_APP
17231723 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
17241724 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
17251725 ; SKX-NEXT: #APP
1726 ; SKX-NEXT: fdivp %st(1) # sched: [15:1.00]
1727 ; SKX-NEXT: fdivp %st(2) # sched: [15:1.00]
1726 ; SKX-NEXT: fdivp %st, %st(1) # sched: [15:1.00]
1727 ; SKX-NEXT: fdivp %st, %st(2) # sched: [15:1.00]
17281728 ; SKX-NEXT: fidivs (%ecx) # sched: [25:1.00]
17291729 ; SKX-NEXT: fidivl (%eax) # sched: [25:1.00]
17301730 ; SKX-NEXT: #NO_APP
17351735 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
17361736 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
17371737 ; BDVER2-NEXT: #APP
1738 ; BDVER2-NEXT: fdivp %st(1) # sched: [9:9.50]
1739 ; BDVER2-NEXT: fdivp %st(2) # sched: [9:9.50]
1738 ; BDVER2-NEXT: fdivp %st, %st(1) # sched: [9:9.50]
1739 ; BDVER2-NEXT: fdivp %st, %st(2) # sched: [9:9.50]
17401740 ; BDVER2-NEXT: fidivs (%ecx) # sched: [14:9.50]
17411741 ; BDVER2-NEXT: fidivl (%eax) # sched: [14:9.50]
17421742 ; BDVER2-NEXT: #NO_APP
17471747 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
17481748 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
17491749 ; BTVER2-NEXT: #APP
1750 ; BTVER2-NEXT: fdivp %st(1) # sched: [19:19.00]
1751 ; BTVER2-NEXT: fdivp %st(2) # sched: [19:19.00]
1750 ; BTVER2-NEXT: fdivp %st, %st(1) # sched: [19:19.00]
1751 ; BTVER2-NEXT: fdivp %st, %st(2) # sched: [19:19.00]
17521752 ; BTVER2-NEXT: fidivs (%ecx) # sched: [24:19.00]
17531753 ; BTVER2-NEXT: fidivl (%eax) # sched: [24:19.00]
17541754 ; BTVER2-NEXT: #NO_APP
17591759 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
17601760 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
17611761 ; ZNVER1-NEXT: #APP
1762 ; ZNVER1-NEXT: fdivp %st(1) # sched: [15:1.00]
1763 ; ZNVER1-NEXT: fdivp %st(2) # sched: [15:1.00]
1762 ; ZNVER1-NEXT: fdivp %st, %st(1) # sched: [15:1.00]
1763 ; ZNVER1-NEXT: fdivp %st, %st(2) # sched: [15:1.00]
17641764 ; ZNVER1-NEXT: fidivs (%ecx) # sched: [22:1.00]
17651765 ; ZNVER1-NEXT: fidivl (%eax) # sched: [22:1.00]
17661766 ; ZNVER1-NEXT: #NO_APP
17751775 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
17761776 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
17771777 ; GENERIC-NEXT: #APP
1778 ; GENERIC-NEXT: fdivr %st(0), %st(1)
1779 ; GENERIC-NEXT: fdivr %st(2)
1778 ; GENERIC-NEXT: fdivr %st, %st(1)
1779 ; GENERIC-NEXT: fdivr %st(2), %st
17801780 ; GENERIC-NEXT: fdivrs (%ecx)
17811781 ; GENERIC-NEXT: fdivrl (%eax)
17821782 ; GENERIC-NEXT: #NO_APP
17871787 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
17881788 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
17891789 ; ATOM-NEXT: #APP
1790 ; ATOM-NEXT: fdivr %st(0), %st(1) # sched: [34:17.00]
1791 ; ATOM-NEXT: fdivr %st(2) # sched: [34:17.00]
1790 ; ATOM-NEXT: fdivr %st, %st(1) # sched: [34:17.00]
1791 ; ATOM-NEXT: fdivr %st(2), %st # sched: [34:17.00]
17921792 ; ATOM-NEXT: fdivrs (%ecx) # sched: [34:17.00]
17931793 ; ATOM-NEXT: fdivrl (%eax) # sched: [34:17.00]
17941794 ; ATOM-NEXT: #NO_APP
17991799 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
18001800 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
18011801 ; SLM-NEXT: #APP
1802 ; SLM-NEXT: fdivr %st(0), %st(1) # sched: [19:17.00]
1803 ; SLM-NEXT: fdivr %st(2) # sched: [19:17.00]
1802 ; SLM-NEXT: fdivr %st, %st(1) # sched: [19:17.00]
1803 ; SLM-NEXT: fdivr %st(2), %st # sched: [19:17.00]
18041804 ; SLM-NEXT: fdivrs (%ecx) # sched: [22:17.00]
18051805 ; SLM-NEXT: fdivrl (%eax) # sched: [22:17.00]
18061806 ; SLM-NEXT: #NO_APP
18111811 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
18121812 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
18131813 ; SANDY-NEXT: #APP
1814 ; SANDY-NEXT: fdivr %st(0), %st(1) # sched: [14:14.00]
1815 ; SANDY-NEXT: fdivr %st(2) # sched: [14:14.00]
1814 ; SANDY-NEXT: fdivr %st, %st(1) # sched: [14:14.00]
1815 ; SANDY-NEXT: fdivr %st(2), %st # sched: [14:14.00]
18161816 ; SANDY-NEXT: fdivrs (%ecx) # sched: [31:1.00]
18171817 ; SANDY-NEXT: fdivrl (%eax) # sched: [31:1.00]
18181818 ; SANDY-NEXT: #NO_APP
18231823 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
18241824 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
18251825 ; HASWELL-NEXT: #APP
1826 ; HASWELL-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00]
1827 ; HASWELL-NEXT: fdivr %st(2) # sched: [24:1.00]
1826 ; HASWELL-NEXT: fdivr %st, %st(1) # sched: [20:1.00]
1827 ; HASWELL-NEXT: fdivr %st(2), %st # sched: [24:1.00]
18281828 ; HASWELL-NEXT: fdivrs (%ecx) # sched: [27:1.00]
18291829 ; HASWELL-NEXT: fdivrl (%eax) # sched: [27:1.00]
18301830 ; HASWELL-NEXT: #NO_APP
18351835 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
18361836 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
18371837 ; BROADWELL-NEXT: #APP
1838 ; BROADWELL-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00]
1839 ; BROADWELL-NEXT: fdivr %st(2) # sched: [15:1.00]
1838 ; BROADWELL-NEXT: fdivr %st, %st(1) # sched: [20:1.00]
1839 ; BROADWELL-NEXT: fdivr %st(2), %st # sched: [15:1.00]
18401840 ; BROADWELL-NEXT: fdivrs (%ecx) # sched: [26:1.00]
18411841 ; BROADWELL-NEXT: fdivrl (%eax) # sched: [26:1.00]
18421842 ; BROADWELL-NEXT: #NO_APP
18471847 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
18481848 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
18491849 ; SKYLAKE-NEXT: #APP
1850 ; SKYLAKE-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00]
1851 ; SKYLAKE-NEXT: fdivr %st(2) # sched: [15:1.00]
1850 ; SKYLAKE-NEXT: fdivr %st, %st(1) # sched: [20:1.00]
1851 ; SKYLAKE-NEXT: fdivr %st(2), %st # sched: [15:1.00]
18521852 ; SKYLAKE-NEXT: fdivrs (%ecx) # sched: [27:1.00]
18531853 ; SKYLAKE-NEXT: fdivrl (%eax) # sched: [27:1.00]
18541854 ; SKYLAKE-NEXT: #NO_APP
18591859 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
18601860 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
18611861 ; SKX-NEXT: #APP
1862 ; SKX-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00]
1863 ; SKX-NEXT: fdivr %st(2) # sched: [15:1.00]
1862 ; SKX-NEXT: fdivr %st, %st(1) # sched: [20:1.00]
1863 ; SKX-NEXT: fdivr %st(2), %st # sched: [15:1.00]
18641864 ; SKX-NEXT: fdivrs (%ecx) # sched: [27:1.00]
18651865 ; SKX-NEXT: fdivrl (%eax) # sched: [27:1.00]
18661866 ; SKX-NEXT: #NO_APP
18711871 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
18721872 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
18731873 ; BDVER2-NEXT: #APP
1874 ; BDVER2-NEXT: fdivr %st(0), %st(1) # sched: [9:9.50]
1875 ; BDVER2-NEXT: fdivr %st(2) # sched: [9:9.50]
1874 ; BDVER2-NEXT: fdivr %st, %st(1) # sched: [9:9.50]
1875 ; BDVER2-NEXT: fdivr %st(2), %st # sched: [9:9.50]
18761876 ; BDVER2-NEXT: fdivrs (%ecx) # sched: [14:9.50]
18771877 ; BDVER2-NEXT: fdivrl (%eax) # sched: [14:9.50]
18781878 ; BDVER2-NEXT: #NO_APP
18831883 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
18841884 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
18851885 ; BTVER2-NEXT: #APP
1886 ; BTVER2-NEXT: fdivr %st(0), %st(1) # sched: [19:19.00]
1887 ; BTVER2-NEXT: fdivr %st(2) # sched: [19:19.00]
1886 ; BTVER2-NEXT: fdivr %st, %st(1) # sched: [19:19.00]
1887 ; BTVER2-NEXT: fdivr %st(2), %st # sched: [19:19.00]
18881888 ; BTVER2-NEXT: fdivrs (%ecx) # sched: [24:19.00]
18891889 ; BTVER2-NEXT: fdivrl (%eax) # sched: [24:19.00]
18901890 ; BTVER2-NEXT: #NO_APP
18951895 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
18961896 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
18971897 ; ZNVER1-NEXT: #APP
1898 ; ZNVER1-NEXT: fdivr %st(0), %st(1) # sched: [15:1.00]
1899 ; ZNVER1-NEXT: fdivr %st(2) # sched: [15:1.00]
1898 ; ZNVER1-NEXT: fdivr %st, %st(1) # sched: [15:1.00]
1899 ; ZNVER1-NEXT: fdivr %st(2), %st # sched: [15:1.00]
19001900 ; ZNVER1-NEXT: fdivrs (%ecx) # sched: [22:1.00]
19011901 ; ZNVER1-NEXT: fdivrl (%eax) # sched: [22:1.00]
19021902 ; ZNVER1-NEXT: #NO_APP
19111911 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
19121912 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
19131913 ; GENERIC-NEXT: #APP
1914 ; GENERIC-NEXT: fdivrp %st(1)
1915 ; GENERIC-NEXT: fdivrp %st(2)
1914 ; GENERIC-NEXT: fdivrp %st, %st(1)
1915 ; GENERIC-NEXT: fdivrp %st, %st(2)
19161916 ; GENERIC-NEXT: fidivrs (%ecx)
19171917 ; GENERIC-NEXT: fidivrl (%eax)
19181918 ; GENERIC-NEXT: #NO_APP
19231923 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
19241924 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
19251925 ; ATOM-NEXT: #APP
1926 ; ATOM-NEXT: fdivrp %st(1) # sched: [34:17.00]
1927 ; ATOM-NEXT: fdivrp %st(2) # sched: [34:17.00]
1926 ; ATOM-NEXT: fdivrp %st, %st(1) # sched: [34:17.00]
1927 ; ATOM-NEXT: fdivrp %st, %st(2) # sched: [34:17.00]
19281928 ; ATOM-NEXT: fidivrs (%ecx) # sched: [34:17.00]
19291929 ; ATOM-NEXT: fidivrl (%eax) # sched: [34:17.00]
19301930 ; ATOM-NEXT: #NO_APP
19351935 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
19361936 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
19371937 ; SLM-NEXT: #APP
1938 ; SLM-NEXT: fdivrp %st(1) # sched: [19:17.00]
1939 ; SLM-NEXT: fdivrp %st(2) # sched: [19:17.00]
1938 ; SLM-NEXT: fdivrp %st, %st(1) # sched: [19:17.00]
1939 ; SLM-NEXT: fdivrp %st, %st(2) # sched: [19:17.00]
19401940 ; SLM-NEXT: fidivrs (%ecx) # sched: [22:17.00]
19411941 ; SLM-NEXT: fidivrl (%eax) # sched: [22:17.00]
19421942 ; SLM-NEXT: #NO_APP
19471947 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
19481948 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
19491949 ; SANDY-NEXT: #APP
1950 ; SANDY-NEXT: fdivrp %st(1) # sched: [14:14.00]
1951 ; SANDY-NEXT: fdivrp %st(2) # sched: [14:14.00]
1950 ; SANDY-NEXT: fdivrp %st, %st(1) # sched: [14:14.00]
1951 ; SANDY-NEXT: fdivrp %st, %st(2) # sched: [14:14.00]
19521952 ; SANDY-NEXT: fidivrs (%ecx) # sched: [34:1.00]
19531953 ; SANDY-NEXT: fidivrl (%eax) # sched: [34:1.00]
19541954 ; SANDY-NEXT: #NO_APP
19591959 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
19601960 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
19611961 ; HASWELL-NEXT: #APP
1962 ; HASWELL-NEXT: fdivrp %st(1) # sched: [20:1.00]
1963 ; HASWELL-NEXT: fdivrp %st(2) # sched: [20:1.00]
1962 ; HASWELL-NEXT: fdivrp %st, %st(1) # sched: [20:1.00]
1963 ; HASWELL-NEXT: fdivrp %st, %st(2) # sched: [20:1.00]
19641964 ; HASWELL-NEXT: fidivrs (%ecx) # sched: [30:1.00]
19651965 ; HASWELL-NEXT: fidivrl (%eax) # sched: [30:1.00]
19661966 ; HASWELL-NEXT: #NO_APP
19711971 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
19721972 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
19731973 ; BROADWELL-NEXT: #APP
1974 ; BROADWELL-NEXT: fdivrp %st(1) # sched: [20:1.00]
1975 ; BROADWELL-NEXT: fdivrp %st(2) # sched: [20:1.00]
1974 ; BROADWELL-NEXT: fdivrp %st, %st(1) # sched: [20:1.00]
1975 ; BROADWELL-NEXT: fdivrp %st, %st(2) # sched: [20:1.00]
19761976 ; BROADWELL-NEXT: fidivrs (%ecx) # sched: [29:1.00]
19771977 ; BROADWELL-NEXT: fidivrl (%eax) # sched: [29:1.00]
19781978 ; BROADWELL-NEXT: #NO_APP
19831983 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
19841984 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
19851985 ; SKYLAKE-NEXT: #APP
1986 ; SKYLAKE-NEXT: fdivrp %st(1) # sched: [20:1.00]
1987 ; SKYLAKE-NEXT: fdivrp %st(2) # sched: [20:1.00]
1986 ; SKYLAKE-NEXT: fdivrp %st, %st(1) # sched: [20:1.00]
1987 ; SKYLAKE-NEXT: fdivrp %st, %st(2) # sched: [20:1.00]
19881988 ; SKYLAKE-NEXT: fidivrs (%ecx) # sched: [30:1.00]
19891989 ; SKYLAKE-NEXT: fidivrl (%eax) # sched: [30:1.00]
19901990 ; SKYLAKE-NEXT: #NO_APP
19951995 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
19961996 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
19971997 ; SKX-NEXT: #APP
1998 ; SKX-NEXT: fdivrp %st(1) # sched: [20:1.00]
1999 ; SKX-NEXT: fdivrp %st(2) # sched: [20:1.00]
1998 ; SKX-NEXT: fdivrp %st, %st(1) # sched: [20:1.00]
1999 ; SKX-NEXT: fdivrp %st, %st(2) # sched: [20:1.00]
20002000 ; SKX-NEXT: fidivrs (%ecx) # sched: [30:1.00]
20012001 ; SKX-NEXT: fidivrl (%eax) # sched: [30:1.00]
20022002 ; SKX-NEXT: #NO_APP
20072007 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
20082008 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
20092009 ; BDVER2-NEXT: #APP
2010 ; BDVER2-NEXT: fdivrp %st(1) # sched: [9:9.50]
2011 ; BDVER2-NEXT: fdivrp %st(2) # sched: [9:9.50]
2010 ; BDVER2-NEXT: fdivrp %st, %st(1) # sched: [9:9.50]
2011 ; BDVER2-NEXT: fdivrp %st, %st(2) # sched: [9:9.50]
20122012 ; BDVER2-NEXT: fidivrs (%ecx) # sched: [14:9.50]
20132013 ; BDVER2-NEXT: fidivrl (%eax) # sched: [14:9.50]
20142014 ; BDVER2-NEXT: #NO_APP
20192019 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
20202020 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
20212021 ; BTVER2-NEXT: #APP
2022 ; BTVER2-NEXT: fdivrp %st(1) # sched: [19:19.00]
2023 ; BTVER2-NEXT: fdivrp %st(2) # sched: [19:19.00]
2022 ; BTVER2-NEXT: fdivrp %st, %st(1) # sched: [19:19.00]
2023 ; BTVER2-NEXT: fdivrp %st, %st(2) # sched: [19:19.00]
20242024 ; BTVER2-NEXT: fidivrs (%ecx) # sched: [24:19.00]
20252025 ; BTVER2-NEXT: fidivrl (%eax) # sched: [24:19.00]
20262026 ; BTVER2-NEXT: #NO_APP
20312031 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
20322032 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
20332033 ; ZNVER1-NEXT: #APP
2034 ; ZNVER1-NEXT: fdivrp %st(1) # sched: [15:1.00]
2035 ; ZNVER1-NEXT: fdivrp %st(2) # sched: [15:1.00]
2034 ; ZNVER1-NEXT: fdivrp %st, %st(1) # sched: [15:1.00]
2035 ; ZNVER1-NEXT: fdivrp %st, %st(2) # sched: [15:1.00]
20362036 ; ZNVER1-NEXT: fidivrs (%ecx) # sched: [22:1.00]
20372037 ; ZNVER1-NEXT: fidivrl (%eax) # sched: [22:1.00]
20382038 ; ZNVER1-NEXT: #NO_APP
32423242 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
32433243 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
32443244 ; GENERIC-NEXT: #APP
3245 ; GENERIC-NEXT: fmul %st(0), %st(1)
3246 ; GENERIC-NEXT: fmul %st(2)
3245 ; GENERIC-NEXT: fmul %st, %st(1)
3246 ; GENERIC-NEXT: fmul %st(2), %st
32473247 ; GENERIC-NEXT: fmuls (%ecx)
32483248 ; GENERIC-NEXT: fmull (%eax)
32493249 ; GENERIC-NEXT: #NO_APP
32543254 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
32553255 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
32563256 ; ATOM-NEXT: #APP
3257 ; ATOM-NEXT: fmul %st(0), %st(1) # sched: [4:4.00]
3258 ; ATOM-NEXT: fmul %st(2) # sched: [4:4.00]
3257 ; ATOM-NEXT: fmul %st, %st(1) # sched: [4:4.00]
3258 ; ATOM-NEXT: fmul %st(2), %st # sched: [4:4.00]
32593259 ; ATOM-NEXT: fmuls (%ecx) # sched: [4:4.00]
32603260 ; ATOM-NEXT: fmull (%eax) # sched: [4:4.00]
32613261 ; ATOM-NEXT: #NO_APP
32663266 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
32673267 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
32683268 ; SLM-NEXT: #APP
3269 ; SLM-NEXT: fmul %st(0), %st(1) # sched: [5:2.00]
3270 ; SLM-NEXT: fmul %st(2) # sched: [5:2.00]
3269 ; SLM-NEXT: fmul %st, %st(1) # sched: [5:2.00]
3270 ; SLM-NEXT: fmul %st(2), %st # sched: [5:2.00]
32713271 ; SLM-NEXT: fmuls (%ecx) # sched: [8:2.00]
32723272 ; SLM-NEXT: fmull (%eax) # sched: [8:2.00]
32733273 ; SLM-NEXT: #NO_APP
32783278 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
32793279 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
32803280 ; SANDY-NEXT: #APP
3281 ; SANDY-NEXT: fmul %st(0), %st(1) # sched: [5:1.00]
3282 ; SANDY-NEXT: fmul %st(2) # sched: [5:1.00]
3281 ; SANDY-NEXT: fmul %st, %st(1) # sched: [5:1.00]
3282 ; SANDY-NEXT: fmul %st(2), %st # sched: [5:1.00]
32833283 ; SANDY-NEXT: fmuls (%ecx) # sched: [12:1.00]
32843284 ; SANDY-NEXT: fmull (%eax) # sched: [12:1.00]
32853285 ; SANDY-NEXT: #NO_APP
32903290 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
32913291 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
32923292 ; HASWELL-NEXT: #APP
3293 ; HASWELL-NEXT: fmul %st(0), %st(1) # sched: [5:1.00]
3294 ; HASWELL-NEXT: fmul %st(2) # sched: [5:1.00]
3293 ; HASWELL-NEXT: fmul %st, %st(1) # sched: [5:1.00]
3294 ; HASWELL-NEXT: fmul %st(2), %st # sched: [5:1.00]
32953295 ; HASWELL-NEXT: fmuls (%ecx) # sched: [12:1.00]
32963296 ; HASWELL-NEXT: fmull (%eax) # sched: [12:1.00]
32973297 ; HASWELL-NEXT: #NO_APP
33023302 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
33033303 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
33043304 ; BROADWELL-NEXT: #APP
3305 ; BROADWELL-NEXT: fmul %st(0), %st(1) # sched: [5:1.00]
3306 ; BROADWELL-NEXT: fmul %st(2) # sched: [5:1.00]
3305 ; BROADWELL-NEXT: fmul %st, %st(1) # sched: [5:1.00]
3306 ; BROADWELL-NEXT: fmul %st(2), %st # sched: [5:1.00]
33073307 ; BROADWELL-NEXT: fmuls (%ecx) # sched: [11:1.00]
33083308 ; BROADWELL-NEXT: fmull (%eax) # sched: [11:1.00]
33093309 ; BROADWELL-NEXT: #NO_APP
33143314 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
33153315 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
33163316 ; SKYLAKE-NEXT: #APP
3317 ; SKYLAKE-NEXT: fmul %st(0), %st(1) # sched: [4:1.00]
3318 ; SKYLAKE-NEXT: fmul %st(2) # sched: [4:1.00]
3317 ; SKYLAKE-NEXT: fmul %st, %st(1) # sched: [4:1.00]
3318 ; SKYLAKE-NEXT: fmul %st(2), %st # sched: [4:1.00]
33193319 ; SKYLAKE-NEXT: fmuls (%ecx) # sched: [11:1.00]
33203320 ; SKYLAKE-NEXT: fmull (%eax) # sched: [11:1.00]
33213321 ; SKYLAKE-NEXT: #NO_APP
33263326 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
33273327 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
33283328 ; SKX-NEXT: #APP
3329 ; SKX-NEXT: fmul %st(0), %st(1) # sched: [4:1.00]
3330 ; SKX-NEXT: fmul %st(2) # sched: [4:1.00]
3329 ; SKX-NEXT: fmul %st, %st(1) # sched: [4:1.00]
3330 ; SKX-NEXT: fmul %st(2), %st # sched: [4:1.00]
33313331 ; SKX-NEXT: fmuls (%ecx) # sched: [11:1.00]
33323332 ; SKX-NEXT: fmull (%eax) # sched: [11:1.00]
33333333 ; SKX-NEXT: #NO_APP
33383338 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
33393339 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
33403340 ; BDVER2-NEXT: #APP
3341 ; BDVER2-NEXT: fmul %st(0), %st(1) # sched: [5:1.00]
3342 ; BDVER2-NEXT: fmul %st(2) # sched: [5:1.00]
3341 ; BDVER2-NEXT: fmul %st, %st(1) # sched: [5:1.00]
3342 ; BDVER2-NEXT: fmul %st(2), %st # sched: [5:1.00]
33433343 ; BDVER2-NEXT: fmuls (%ecx) # sched: [10:1.00]
33443344 ; BDVER2-NEXT: fmull (%eax) # sched: [10:1.00]
33453345 ; BDVER2-NEXT: #NO_APP
33503350 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
33513351 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
33523352 ; BTVER2-NEXT: #APP
3353 ; BTVER2-NEXT: fmul %st(0), %st(1) # sched: [2:1.00]
3354 ; BTVER2-NEXT: fmul %st(2) # sched: [2:1.00]
3353 ; BTVER2-NEXT: fmul %st, %st(1) # sched: [2:1.00]
3354 ; BTVER2-NEXT: fmul %st(2), %st # sched: [2:1.00]
33553355 ; BTVER2-NEXT: fmuls (%ecx) # sched: [7:1.00]
33563356 ; BTVER2-NEXT: fmull (%eax) # sched: [7:1.00]
33573357 ; BTVER2-NEXT: #NO_APP
33623362 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
33633363 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
33643364 ; ZNVER1-NEXT: #APP
3365 ; ZNVER1-NEXT: fmul %st(0), %st(1) # sched: [3:0.50]
3366 ; ZNVER1-NEXT: fmul %st(2) # sched: [3:0.50]
3365 ; ZNVER1-NEXT: fmul %st, %st(1) # sched: [3:0.50]
3366 ; ZNVER1-NEXT: fmul %st(2), %st # sched: [3:0.50]
33673367 ; ZNVER1-NEXT: fmuls (%ecx) # sched: [10:0.50]
33683368 ; ZNVER1-NEXT: fmull (%eax) # sched: [10:0.50]
33693369 ; ZNVER1-NEXT: #NO_APP
33783378 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
33793379 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
33803380 ; GENERIC-NEXT: #APP
3381 ; GENERIC-NEXT: fmulp %st(1)
3382 ; GENERIC-NEXT: fmulp %st(2)
3381 ; GENERIC-NEXT: fmulp %st, %st(1)
3382 ; GENERIC-NEXT: fmulp %st, %st(2)
33833383 ; GENERIC-NEXT: fimuls (%ecx)
33843384 ; GENERIC-NEXT: fimull (%eax)
33853385 ; GENERIC-NEXT: #NO_APP
33903390 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
33913391 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
33923392 ; ATOM-NEXT: #APP
3393 ; ATOM-NEXT: fmulp %st(1) # sched: [4:4.00]
3394 ; ATOM-NEXT: fmulp %st(2) # sched: [4:4.00]
3393 ; ATOM-NEXT: fmulp %st, %st(1) # sched: [4:4.00]
3394 ; ATOM-NEXT: fmulp %st, %st(2) # sched: [4:4.00]
33953395 ; ATOM-NEXT: fimuls (%ecx) # sched: [4:4.00]
33963396 ; ATOM-NEXT: fimull (%eax) # sched: [4:4.00]
33973397 ; ATOM-NEXT: #NO_APP
34023402 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
34033403 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
34043404 ; SLM-NEXT: #APP
3405 ; SLM-NEXT: fmulp %st(1) # sched: [5:2.00]
3406 ; SLM-NEXT: fmulp %st(2) # sched: [5:2.00]
3405 ; SLM-NEXT: fmulp %st, %st(1) # sched: [5:2.00]
3406 ; SLM-NEXT: fmulp %st, %st(2) # sched: [5:2.00]
34073407 ; SLM-NEXT: fimuls (%ecx) # sched: [8:2.00]
34083408 ; SLM-NEXT: fimull (%eax) # sched: [8:2.00]
34093409 ; SLM-NEXT: #NO_APP
34143414 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
34153415 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
34163416 ; SANDY-NEXT: #APP
3417 ; SANDY-NEXT: fmulp %st(1) # sched: [5:1.00]
3418 ; SANDY-NEXT: fmulp %st(2) # sched: [5:1.00]
3417 ; SANDY-NEXT: fmulp %st, %st(1) # sched: [5:1.00]
3418 ; SANDY-NEXT: fmulp %st, %st(2) # sched: [5:1.00]
34193419 ; SANDY-NEXT: fimuls (%ecx) # sched: [15:1.00]
34203420 ; SANDY-NEXT: fimull (%eax) # sched: [15:1.00]
34213421 ; SANDY-NEXT: #NO_APP
34263426 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
34273427 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
34283428 ; HASWELL-NEXT: #APP
3429 ; HASWELL-NEXT: fmulp %st(1) # sched: [5:1.00]
3430 ; HASWELL-NEXT: fmulp %st(2) # sched: [5:1.00]
3429 ; HASWELL-NEXT: fmulp %st, %st(1) # sched: [5:1.00]
3430 ; HASWELL-NEXT: fmulp %st, %st(2) # sched: [5:1.00]
34313431 ; HASWELL-NEXT: fimuls (%ecx) # sched: [15:1.00]
34323432 ; HASWELL-NEXT: fimull (%eax) # sched: [15:1.00]
34333433 ; HASWELL-NEXT: #NO_APP
34383438 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
34393439 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
34403440 ; BROADWELL-NEXT: #APP
3441 ; BROADWELL-NEXT: fmulp %st(1) # sched: [5:1.00]
3442 ; BROADWELL-NEXT: fmulp %st(2) # sched: [5:1.00]
3441 ; BROADWELL-NEXT: fmulp %st, %st(1) # sched: [5:1.00]
3442 ; BROADWELL-NEXT: fmulp %st, %st(2) # sched: [5:1.00]
34433443 ; BROADWELL-NEXT: fimuls (%ecx) # sched: [14:1.00]
34443444 ; BROADWELL-NEXT: fimull (%eax) # sched: [14:1.00]
34453445 ; BROADWELL-NEXT: #NO_APP
34503450 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
34513451 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
34523452 ; SKYLAKE-NEXT: #APP
3453 ; SKYLAKE-NEXT: fmulp %st(1) # sched: [4:1.00]
3454 ; SKYLAKE-NEXT: fmulp %st(2) # sched: [4:1.00]
3453 ; SKYLAKE-NEXT: fmulp %st, %st(1) # sched: [4:1.00]
3454 ; SKYLAKE-NEXT: fmulp %st, %st(2) # sched: [4:1.00]
34553455 ; SKYLAKE-NEXT: fimuls (%ecx) # sched: [14:1.00]
34563456 ; SKYLAKE-NEXT: fimull (%eax) # sched: [14:1.00]
34573457 ; SKYLAKE-NEXT: #NO_APP
34623462 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
34633463 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
34643464 ; SKX-NEXT: #APP
3465 ; SKX-NEXT: fmulp %st(1) # sched: [4:1.00]
3466 ; SKX-NEXT: fmulp %st(2) # sched: [4:1.00]
3465 ; SKX-NEXT: fmulp %st, %st(1) # sched: [4:1.00]
3466 ; SKX-NEXT: fmulp %st, %st(2) # sched: [4:1.00]
34673467 ; SKX-NEXT: fimuls (%ecx) # sched: [14:1.00]
34683468 ; SKX-NEXT: fimull (%eax) # sched: [14:1.00]
34693469 ; SKX-NEXT: #NO_APP
34743474 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
34753475 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
34763476 ; BDVER2-NEXT: #APP
3477 ; BDVER2-NEXT: fmulp %st(1) # sched: [5:1.00]
3478 ; BDVER2-NEXT: fmulp %st(2) # sched: [5:1.00]
3477 ; BDVER2-NEXT: fmulp %st, %st(1) # sched: [5:1.00]
3478 ; BDVER2-NEXT: fmulp %st, %st(2) # sched: [5:1.00]
34793479 ; BDVER2-NEXT: fimuls (%ecx) # sched: [10:1.00]
34803480 ; BDVER2-NEXT: fimull (%eax) # sched: [10:1.00]
34813481 ; BDVER2-NEXT: #NO_APP
34863486 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
34873487 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
34883488 ; BTVER2-NEXT: #APP
3489 ; BTVER2-NEXT: fmulp %st(1) # sched: [2:1.00]
3490 ; BTVER2-NEXT: fmulp %st(2) # sched: [2:1.00]
3489 ; BTVER2-NEXT: fmulp %st, %st(1) # sched: [2:1.00]
3490 ; BTVER2-NEXT: fmulp %st, %st(2) # sched: [2:1.00]
34913491 ; BTVER2-NEXT: fimuls (%ecx) # sched: [7:1.00]
34923492 ; BTVER2-NEXT: fimull (%eax) # sched: [7:1.00]
34933493 ; BTVER2-NEXT: #NO_APP
34983498 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
34993499 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
35003500 ; ZNVER1-NEXT: #APP
3501 ; ZNVER1-NEXT: fmulp %st(1) # sched: [3:0.50]
3502 ; ZNVER1-NEXT: fmulp %st(2) # sched: [3:0.50]
3501 ; ZNVER1-NEXT: fmulp %st, %st(1) # sched: [3:0.50]
3502 ; ZNVER1-NEXT: fmulp %st, %st(2) # sched: [3:0.50]
35033503 ; ZNVER1-NEXT: fimuls (%ecx) # sched: [10:0.50]
35043504 ; ZNVER1-NEXT: fimull (%eax) # sched: [10:0.50]
35053505 ; ZNVER1-NEXT: #NO_APP
49824982 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
49834983 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
49844984 ; GENERIC-NEXT: #APP
4985 ; GENERIC-NEXT: fsub %st(0), %st(1)
4986 ; GENERIC-NEXT: fsub %st(2)
4985 ; GENERIC-NEXT: fsub %st, %st(1)
4986 ; GENERIC-NEXT: fsub %st(2), %st
49874987 ; GENERIC-NEXT: fsubs (%ecx)
49884988 ; GENERIC-NEXT: fsubl (%eax)
49894989 ; GENERIC-NEXT: #NO_APP
49944994 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
49954995 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
49964996 ; ATOM-NEXT: #APP
4997 ; ATOM-NEXT: fsub %st(0), %st(1) # sched: [5:5.00]
4998 ; ATOM-NEXT: fsub %st(2) # sched: [5:5.00]
4997 ; ATOM-NEXT: fsub %st, %st(1) # sched: [5:5.00]
4998 ; ATOM-NEXT: fsub %st(2), %st # sched: [5:5.00]
49994999 ; ATOM-NEXT: fsubs (%ecx) # sched: [5:5.00]
50005000 ; ATOM-NEXT: fsubl (%eax) # sched: [5:5.00]
50015001 ; ATOM-NEXT: #NO_APP
50065006 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
50075007 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
50085008 ; SLM-NEXT: #APP
5009 ; SLM-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5010 ; SLM-NEXT: fsub %st(2) # sched: [3:1.00]
5009 ; SLM-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5010 ; SLM-NEXT: fsub %st(2), %st # sched: [3:1.00]
50115011 ; SLM-NEXT: fsubs (%ecx) # sched: [6:1.00]
50125012 ; SLM-NEXT: fsubl (%eax) # sched: [6:1.00]
50135013 ; SLM-NEXT: #NO_APP
50185018 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
50195019 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
50205020 ; SANDY-NEXT: #APP
5021 ; SANDY-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5022 ; SANDY-NEXT: fsub %st(2) # sched: [3:1.00]
5021 ; SANDY-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5022 ; SANDY-NEXT: fsub %st(2), %st # sched: [3:1.00]
50235023 ; SANDY-NEXT: fsubs (%ecx) # sched: [10:1.00]
50245024 ; SANDY-NEXT: fsubl (%eax) # sched: [10:1.00]
50255025 ; SANDY-NEXT: #NO_APP
50305030 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
50315031 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
50325032 ; HASWELL-NEXT: #APP
5033 ; HASWELL-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5034 ; HASWELL-NEXT: fsub %st(2) # sched: [3:1.00]
5033 ; HASWELL-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5034 ; HASWELL-NEXT: fsub %st(2), %st # sched: [3:1.00]
50355035 ; HASWELL-NEXT: fsubs (%ecx) # sched: [10:1.00]
50365036 ; HASWELL-NEXT: fsubl (%eax) # sched: [10:1.00]
50375037 ; HASWELL-NEXT: #NO_APP
50425042 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
50435043 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
50445044 ; BROADWELL-NEXT: #APP
5045 ; BROADWELL-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5046 ; BROADWELL-NEXT: fsub %st(2) # sched: [3:1.00]
5045 ; BROADWELL-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5046 ; BROADWELL-NEXT: fsub %st(2), %st # sched: [3:1.00]
50475047 ; BROADWELL-NEXT: fsubs (%ecx) # sched: [9:1.00]
50485048 ; BROADWELL-NEXT: fsubl (%eax) # sched: [9:1.00]
50495049 ; BROADWELL-NEXT: #NO_APP
50545054 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
50555055 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
50565056 ; SKYLAKE-NEXT: #APP
5057 ; SKYLAKE-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5058 ; SKYLAKE-NEXT: fsub %st(2) # sched: [3:1.00]
5057 ; SKYLAKE-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5058 ; SKYLAKE-NEXT: fsub %st(2), %st # sched: [3:1.00]
50595059 ; SKYLAKE-NEXT: fsubs (%ecx) # sched: [10:1.00]
50605060 ; SKYLAKE-NEXT: fsubl (%eax) # sched: [10:1.00]
50615061 ; SKYLAKE-NEXT: #NO_APP
50665066 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
50675067 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
50685068 ; SKX-NEXT: #APP
5069 ; SKX-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5070 ; SKX-NEXT: fsub %st(2) # sched: [3:1.00]
5069 ; SKX-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5070 ; SKX-NEXT: fsub %st(2), %st # sched: [3:1.00]
50715071 ; SKX-NEXT: fsubs (%ecx) # sched: [10:1.00]
50725072 ; SKX-NEXT: fsubl (%eax) # sched: [10:1.00]
50735073 ; SKX-NEXT: #NO_APP
50785078 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
50795079 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
50805080 ; BDVER2-NEXT: #APP
5081 ; BDVER2-NEXT: fsub %st(0), %st(1) # sched: [5:1.00]
5082 ; BDVER2-NEXT: fsub %st(2) # sched: [5:1.00]
5081 ; BDVER2-NEXT: fsub %st, %st(1) # sched: [5:1.00]
5082 ; BDVER2-NEXT: fsub %st(2), %st # sched: [5:1.00]
50835083 ; BDVER2-NEXT: fsubs (%ecx) # sched: [10:1.00]
50845084 ; BDVER2-NEXT: fsubl (%eax) # sched: [10:1.00]
50855085 ; BDVER2-NEXT: #NO_APP
50905090 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
50915091 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
50925092 ; BTVER2-NEXT: #APP
5093 ; BTVER2-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5094 ; BTVER2-NEXT: fsub %st(2) # sched: [3:1.00]
5093 ; BTVER2-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5094 ; BTVER2-NEXT: fsub %st(2), %st # sched: [3:1.00]
50955095 ; BTVER2-NEXT: fsubs (%ecx) # sched: [8:1.00]
50965096 ; BTVER2-NEXT: fsubl (%eax) # sched: [8:1.00]
50975097 ; BTVER2-NEXT: #NO_APP
51025102 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
51035103 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
51045104 ; ZNVER1-NEXT: #APP
5105 ; ZNVER1-NEXT: fsub %st(0), %st(1) # sched: [3:1.00]
5106 ; ZNVER1-NEXT: fsub %st(2) # sched: [3:1.00]
5105 ; ZNVER1-NEXT: fsub %st, %st(1) # sched: [3:1.00]
5106 ; ZNVER1-NEXT: fsub %st(2), %st # sched: [3:1.00]
51075107 ; ZNVER1-NEXT: fsubs (%ecx) # sched: [10:1.00]
51085108 ; ZNVER1-NEXT: fsubl (%eax) # sched: [10:1.00]
51095109 ; ZNVER1-NEXT: #NO_APP
51185118 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
51195119 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
51205120 ; GENERIC-NEXT: #APP
5121 ; GENERIC-NEXT: fsubp %st(1)
5122 ; GENERIC-NEXT: fsubp %st(2)
5121 ; GENERIC-NEXT: fsubp %st, %st(1)
5122 ; GENERIC-NEXT: fsubp %st, %st(2)
51235123 ; GENERIC-NEXT: fisubs (%ecx)
51245124 ; GENERIC-NEXT: fisubl (%eax)
51255125 ; GENERIC-NEXT: #NO_APP
51305130 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
51315131 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
51325132 ; ATOM-NEXT: #APP
5133 ; ATOM-NEXT: fsubp %st(1) # sched: [5:5.00]
5134 ; ATOM-NEXT: fsubp %st(2) # sched: [5:5.00]
5133 ; ATOM-NEXT: fsubp %st, %st(1) # sched: [5:5.00]
5134 ; ATOM-NEXT: fsubp %st, %st(2) # sched: [5:5.00]
51355135 ; ATOM-NEXT: fisubs (%ecx) # sched: [5:5.00]
51365136 ; ATOM-NEXT: fisubl (%eax) # sched: [5:5.00]
51375137 ; ATOM-NEXT: #NO_APP
51425142 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
51435143 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
51445144 ; SLM-NEXT: #APP
5145 ; SLM-NEXT: fsubp %st(1) # sched: [3:1.00]
5146 ; SLM-NEXT: fsubp %st(2) # sched: [3:1.00]
5145 ; SLM-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5146 ; SLM-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
51475147 ; SLM-NEXT: fisubs (%ecx) # sched: [6:1.00]
51485148 ; SLM-NEXT: fisubl (%eax) # sched: [6:1.00]
51495149 ; SLM-NEXT: #NO_APP
51545154 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
51555155 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
51565156 ; SANDY-NEXT: #APP
5157 ; SANDY-NEXT: fsubp %st(1) # sched: [3:1.00]
5158 ; SANDY-NEXT: fsubp %st(2) # sched: [3:1.00]
5157 ; SANDY-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5158 ; SANDY-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
51595159 ; SANDY-NEXT: fisubs (%ecx) # sched: [13:2.00]
51605160 ; SANDY-NEXT: fisubl (%eax) # sched: [13:2.00]
51615161 ; SANDY-NEXT: #NO_APP
51665166 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
51675167 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
51685168 ; HASWELL-NEXT: #APP
5169 ; HASWELL-NEXT: fsubp %st(1) # sched: [3:1.00]
5170 ; HASWELL-NEXT: fsubp %st(2) # sched: [3:1.00]
5169 ; HASWELL-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5170 ; HASWELL-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
51715171 ; HASWELL-NEXT: fisubs (%ecx) # sched: [13:2.00]
51725172 ; HASWELL-NEXT: fisubl (%eax) # sched: [13:2.00]
51735173 ; HASWELL-NEXT: #NO_APP
51785178 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
51795179 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
51805180 ; BROADWELL-NEXT: #APP
5181 ; BROADWELL-NEXT: fsubp %st(1) # sched: [3:1.00]
5182 ; BROADWELL-NEXT: fsubp %st(2) # sched: [3:1.00]
5181 ; BROADWELL-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5182 ; BROADWELL-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
51835183 ; BROADWELL-NEXT: fisubs (%ecx) # sched: [12:2.00]
51845184 ; BROADWELL-NEXT: fisubl (%eax) # sched: [12:2.00]
51855185 ; BROADWELL-NEXT: #NO_APP
51905190 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
51915191 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
51925192 ; SKYLAKE-NEXT: #APP
5193 ; SKYLAKE-NEXT: fsubp %st(1) # sched: [3:1.00]
5194 ; SKYLAKE-NEXT: fsubp %st(2) # sched: [3:1.00]
5193 ; SKYLAKE-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5194 ; SKYLAKE-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
51955195 ; SKYLAKE-NEXT: fisubs (%ecx) # sched: [13:2.00]
51965196 ; SKYLAKE-NEXT: fisubl (%eax) # sched: [13:2.00]
51975197 ; SKYLAKE-NEXT: #NO_APP
52025202 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
52035203 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
52045204 ; SKX-NEXT: #APP
5205 ; SKX-NEXT: fsubp %st(1) # sched: [3:1.00]
5206 ; SKX-NEXT: fsubp %st(2) # sched: [3:1.00]
5205 ; SKX-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5206 ; SKX-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
52075207 ; SKX-NEXT: fisubs (%ecx) # sched: [13:2.00]
52085208 ; SKX-NEXT: fisubl (%eax) # sched: [13:2.00]
52095209 ; SKX-NEXT: #NO_APP
52145214 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
52155215 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
52165216 ; BDVER2-NEXT: #APP
5217 ; BDVER2-NEXT: fsubp %st(1) # sched: [5:1.00]
5218 ; BDVER2-NEXT: fsubp %st(2) # sched: [5:1.00]
5217 ; BDVER2-NEXT: fsubp %st, %st(1) # sched: [5:1.00]
5218 ; BDVER2-NEXT: fsubp %st, %st(2) # sched: [5:1.00]
52195219 ; BDVER2-NEXT: fisubs (%ecx) # sched: [10:1.00]
52205220 ; BDVER2-NEXT: fisubl (%eax) # sched: [10:1.00]
52215221 ; BDVER2-NEXT: #NO_APP
52265226 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
52275227 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
52285228 ; BTVER2-NEXT: #APP
5229 ; BTVER2-NEXT: fsubp %st(1) # sched: [3:1.00]
5230 ; BTVER2-NEXT: fsubp %st(2) # sched: [3:1.00]
5229 ; BTVER2-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5230 ; BTVER2-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
52315231 ; BTVER2-NEXT: fisubs (%ecx) # sched: [8:1.00]
52325232 ; BTVER2-NEXT: fisubl (%eax) # sched: [8:1.00]
52335233 ; BTVER2-NEXT: #NO_APP
52385238 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
52395239 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
52405240 ; ZNVER1-NEXT: #APP
5241 ; ZNVER1-NEXT: fsubp %st(1) # sched: [3:1.00]
5242 ; ZNVER1-NEXT: fsubp %st(2) # sched: [3:1.00]
5241 ; ZNVER1-NEXT: fsubp %st, %st(1) # sched: [3:1.00]
5242 ; ZNVER1-NEXT: fsubp %st, %st(2) # sched: [3:1.00]
52435243 ; ZNVER1-NEXT: fisubs (%ecx) # sched: [10:1.00]
52445244 ; ZNVER1-NEXT: fisubl (%eax) # sched: [10:1.00]
52455245 ; ZNVER1-NEXT: #NO_APP
52545254 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
52555255 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
52565256 ; GENERIC-NEXT: #APP
5257 ; GENERIC-NEXT: fsubr %st(0), %st(1)
5258 ; GENERIC-NEXT: fsubr %st(2)
5257 ; GENERIC-NEXT: fsubr %st, %st(1)
5258 ; GENERIC-NEXT: fsubr %st(2), %st
52595259 ; GENERIC-NEXT: fsubrs (%ecx)
52605260 ; GENERIC-NEXT: fsubrl (%eax)
52615261 ; GENERIC-NEXT: #NO_APP
52665266 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
52675267 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
52685268 ; ATOM-NEXT: #APP
5269 ; ATOM-NEXT: fsubr %st(0), %st(1) # sched: [5:5.00]
5270 ; ATOM-NEXT: fsubr %st(2) # sched: [5:5.00]
5269 ; ATOM-NEXT: fsubr %st, %st(1) # sched: [5:5.00]
5270 ; ATOM-NEXT: fsubr %st(2), %st # sched: [5:5.00]
52715271 ; ATOM-NEXT: fsubrs (%ecx) # sched: [5:5.00]
52725272 ; ATOM-NEXT: fsubrl (%eax) # sched: [5:5.00]
52735273 ; ATOM-NEXT: #NO_APP
52785278 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
52795279 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
52805280 ; SLM-NEXT: #APP
5281 ; SLM-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5282 ; SLM-NEXT: fsubr %st(2) # sched: [3:1.00]
5281 ; SLM-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5282 ; SLM-NEXT: fsubr %st(2), %st # sched: [3:1.00]
52835283 ; SLM-NEXT: fsubrs (%ecx) # sched: [6:1.00]
52845284 ; SLM-NEXT: fsubrl (%eax) # sched: [6:1.00]
52855285 ; SLM-NEXT: #NO_APP
52905290 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
52915291 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
52925292 ; SANDY-NEXT: #APP
5293 ; SANDY-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5294 ; SANDY-NEXT: fsubr %st(2) # sched: [3:1.00]
5293 ; SANDY-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5294 ; SANDY-NEXT: fsubr %st(2), %st # sched: [3:1.00]
52955295 ; SANDY-NEXT: fsubrs (%ecx) # sched: [10:1.00]
52965296 ; SANDY-NEXT: fsubrl (%eax) # sched: [10:1.00]
52975297 ; SANDY-NEXT: #NO_APP
53025302 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
53035303 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
53045304 ; HASWELL-NEXT: #APP
5305 ; HASWELL-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5306 ; HASWELL-NEXT: fsubr %st(2) # sched: [3:1.00]
5305 ; HASWELL-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5306 ; HASWELL-NEXT: fsubr %st(2), %st # sched: [3:1.00]
53075307 ; HASWELL-NEXT: fsubrs (%ecx) # sched: [10:1.00]
53085308 ; HASWELL-NEXT: fsubrl (%eax) # sched: [10:1.00]
53095309 ; HASWELL-NEXT: #NO_APP
53145314 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
53155315 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
53165316 ; BROADWELL-NEXT: #APP
5317 ; BROADWELL-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5318 ; BROADWELL-NEXT: fsubr %st(2) # sched: [3:1.00]
5317 ; BROADWELL-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5318 ; BROADWELL-NEXT: fsubr %st(2), %st # sched: [3:1.00]
53195319 ; BROADWELL-NEXT: fsubrs (%ecx) # sched: [9:1.00]
53205320 ; BROADWELL-NEXT: fsubrl (%eax) # sched: [9:1.00]
53215321 ; BROADWELL-NEXT: #NO_APP
53265326 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
53275327 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
53285328 ; SKYLAKE-NEXT: #APP
5329 ; SKYLAKE-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5330 ; SKYLAKE-NEXT: fsubr %st(2) # sched: [3:1.00]
5329 ; SKYLAKE-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5330 ; SKYLAKE-NEXT: fsubr %st(2), %st # sched: [3:1.00]
53315331 ; SKYLAKE-NEXT: fsubrs (%ecx) # sched: [10:1.00]
53325332 ; SKYLAKE-NEXT: fsubrl (%eax) # sched: [10:1.00]
53335333 ; SKYLAKE-NEXT: #NO_APP
53385338 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
53395339 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
53405340 ; SKX-NEXT: #APP
5341 ; SKX-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5342 ; SKX-NEXT: fsubr %st(2) # sched: [3:1.00]
5341 ; SKX-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5342 ; SKX-NEXT: fsubr %st(2), %st # sched: [3:1.00]
53435343 ; SKX-NEXT: fsubrs (%ecx) # sched: [10:1.00]
53445344 ; SKX-NEXT: fsubrl (%eax) # sched: [10:1.00]
53455345 ; SKX-NEXT: #NO_APP
53505350 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
53515351 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
53525352 ; BDVER2-NEXT: #APP
5353 ; BDVER2-NEXT: fsubr %st(0), %st(1) # sched: [5:1.00]
5354 ; BDVER2-NEXT: fsubr %st(2) # sched: [5:1.00]
5353 ; BDVER2-NEXT: fsubr %st, %st(1) # sched: [5:1.00]
5354 ; BDVER2-NEXT: fsubr %st(2), %st # sched: [5:1.00]
53555355 ; BDVER2-NEXT: fsubrs (%ecx) # sched: [10:1.00]
53565356 ; BDVER2-NEXT: fsubrl (%eax) # sched: [10:1.00]
53575357 ; BDVER2-NEXT: #NO_APP
53625362 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
53635363 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
53645364 ; BTVER2-NEXT: #APP
5365 ; BTVER2-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5366 ; BTVER2-NEXT: fsubr %st(2) # sched: [3:1.00]
5365 ; BTVER2-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5366 ; BTVER2-NEXT: fsubr %st(2), %st # sched: [3:1.00]
53675367 ; BTVER2-NEXT: fsubrs (%ecx) # sched: [8:1.00]
53685368 ; BTVER2-NEXT: fsubrl (%eax) # sched: [8:1.00]
53695369 ; BTVER2-NEXT: #NO_APP
53745374 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
53755375 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
53765376 ; ZNVER1-NEXT: #APP
5377 ; ZNVER1-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00]
5378 ; ZNVER1-NEXT: fsubr %st(2) # sched: [3:1.00]
5377 ; ZNVER1-NEXT: fsubr %st, %st(1) # sched: [3:1.00]
5378 ; ZNVER1-NEXT: fsubr %st(2), %st # sched: [3:1.00]
53795379 ; ZNVER1-NEXT: fsubrs (%ecx) # sched: [10:1.00]
53805380 ; ZNVER1-NEXT: fsubrl (%eax) # sched: [10:1.00]
53815381 ; ZNVER1-NEXT: #NO_APP
53905390 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax
53915391 ; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx
53925392 ; GENERIC-NEXT: #APP
5393 ; GENERIC-NEXT: fsubrp %st(1)
5394 ; GENERIC-NEXT: fsubrp %st(2)
5393 ; GENERIC-NEXT: fsubrp %st, %st(1)
5394 ; GENERIC-NEXT: fsubrp %st, %st(2)
53955395 ; GENERIC-NEXT: fisubrs (%ecx)
53965396 ; GENERIC-NEXT: fisubrl (%eax)
53975397 ; GENERIC-NEXT: #NO_APP
54025402 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00]
54035403 ; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00]
54045404 ; ATOM-NEXT: #APP
5405 ; ATOM-NEXT: fsubrp %st(1) # sched: [5:5.00]
5406 ; ATOM-NEXT: fsubrp %st(2) # sched: [5:5.00]
5405 ; ATOM-NEXT: fsubrp %st, %st(1) # sched: [5:5.00]
5406 ; ATOM-NEXT: fsubrp %st, %st(2) # sched: [5:5.00]
54075407 ; ATOM-NEXT: fisubrs (%ecx) # sched: [5:5.00]
54085408 ; ATOM-NEXT: fisubrl (%eax) # sched: [5:5.00]
54095409 ; ATOM-NEXT: #NO_APP
54145414 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00]
54155415 ; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00]
54165416 ; SLM-NEXT: #APP
5417 ; SLM-NEXT: fsubrp %st(1) # sched: [3:1.00]
5418 ; SLM-NEXT: fsubrp %st(2) # sched: [3:1.00]
5417 ; SLM-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5418 ; SLM-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
54195419 ; SLM-NEXT: fisubrs (%ecx) # sched: [6:1.00]
54205420 ; SLM-NEXT: fisubrl (%eax) # sched: [6:1.00]
54215421 ; SLM-NEXT: #NO_APP
54265426 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
54275427 ; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
54285428 ; SANDY-NEXT: #APP
5429 ; SANDY-NEXT: fsubrp %st(1) # sched: [3:1.00]
5430 ; SANDY-NEXT: fsubrp %st(2) # sched: [3:1.00]
5429 ; SANDY-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5430 ; SANDY-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
54315431 ; SANDY-NEXT: fisubrs (%ecx) # sched: [13:2.00]
54325432 ; SANDY-NEXT: fisubrl (%eax) # sched: [13:2.00]
54335433 ; SANDY-NEXT: #NO_APP
54385438 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
54395439 ; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
54405440 ; HASWELL-NEXT: #APP
5441 ; HASWELL-NEXT: fsubrp %st(1) # sched: [3:1.00]
5442 ; HASWELL-NEXT: fsubrp %st(2) # sched: [3:1.00]
5441 ; HASWELL-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5442 ; HASWELL-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
54435443 ; HASWELL-NEXT: fisubrs (%ecx) # sched: [13:2.00]
54445444 ; HASWELL-NEXT: fisubrl (%eax) # sched: [13:2.00]
54455445 ; HASWELL-NEXT: #NO_APP
54505450 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
54515451 ; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
54525452 ; BROADWELL-NEXT: #APP
5453 ; BROADWELL-NEXT: fsubrp %st(1) # sched: [3:1.00]
5454 ; BROADWELL-NEXT: fsubrp %st(2) # sched: [3:1.00]
5453 ; BROADWELL-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5454 ; BROADWELL-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
54555455 ; BROADWELL-NEXT: fisubrs (%ecx) # sched: [12:2.00]
54565456 ; BROADWELL-NEXT: fisubrl (%eax) # sched: [12:2.00]
54575457 ; BROADWELL-NEXT: #NO_APP
54625462 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
54635463 ; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
54645464 ; SKYLAKE-NEXT: #APP
5465 ; SKYLAKE-NEXT: fsubrp %st(1) # sched: [3:1.00]
5466 ; SKYLAKE-NEXT: fsubrp %st(2) # sched: [3:1.00]
5465 ; SKYLAKE-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5466 ; SKYLAKE-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
54675467 ; SKYLAKE-NEXT: fisubrs (%ecx) # sched: [13:2.00]
54685468 ; SKYLAKE-NEXT: fisubrl (%eax) # sched: [13:2.00]
54695469 ; SKYLAKE-NEXT: #NO_APP
54745474 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
54755475 ; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
54765476 ; SKX-NEXT: #APP
5477 ; SKX-NEXT: fsubrp %st(1) # sched: [3:1.00]
5478 ; SKX-NEXT: fsubrp %st(2) # sched: [3:1.00]
5477 ; SKX-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5478 ; SKX-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
54795479 ; SKX-NEXT: fisubrs (%ecx) # sched: [13:2.00]
54805480 ; SKX-NEXT: fisubrl (%eax) # sched: [13:2.00]
54815481 ; SKX-NEXT: #NO_APP
54865486 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50]
54875487 ; BDVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50]
54885488 ; BDVER2-NEXT: #APP
5489 ; BDVER2-NEXT: fsubrp %st(1) # sched: [5:1.00]
5490 ; BDVER2-NEXT: fsubrp %st(2) # sched: [5:1.00]
5489 ; BDVER2-NEXT: fsubrp %st, %st(1) # sched: [5:1.00]
5490 ; BDVER2-NEXT: fsubrp %st, %st(2) # sched: [5:1.00]
54915491 ; BDVER2-NEXT: fisubrs (%ecx) # sched: [10:1.00]
54925492 ; BDVER2-NEXT: fisubrl (%eax) # sched: [10:1.00]
54935493 ; BDVER2-NEXT: #NO_APP
54985498 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00]
54995499 ; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00]
55005500 ; BTVER2-NEXT: #APP
5501 ; BTVER2-NEXT: fsubrp %st(1) # sched: [3:1.00]
5502 ; BTVER2-NEXT: fsubrp %st(2) # sched: [3:1.00]
5501 ; BTVER2-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5502 ; BTVER2-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
55035503 ; BTVER2-NEXT: fisubrs (%ecx) # sched: [8:1.00]
55045504 ; BTVER2-NEXT: fisubrl (%eax) # sched: [8:1.00]
55055505 ; BTVER2-NEXT: #NO_APP
55105510 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50]
55115511 ; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50]
55125512 ; ZNVER1-NEXT: #APP
5513 ; ZNVER1-NEXT: fsubrp %st(1) # sched: [3:1.00]
5514 ; ZNVER1-NEXT: fsubrp %st(2) # sched: [3:1.00]
5513 ; ZNVER1-NEXT: fsubrp %st, %st(1) # sched: [3:1.00]
5514 ; ZNVER1-NEXT: fsubrp %st, %st(2) # sched: [3:1.00]
55155515 ; ZNVER1-NEXT: fisubrs (%ecx) # sched: [10:1.00]
55165516 ; ZNVER1-NEXT: fisubrl (%eax) # sched: [10:1.00]
55175517 ; ZNVER1-NEXT: #NO_APP
57305730 ; GENERIC-LABEL: test_fucomi_fucomip:
57315731 ; GENERIC: # %bb.0:
57325732 ; GENERIC-NEXT: #APP
5733 ; GENERIC-NEXT: fucomi %st(3)
5734 ; GENERIC-NEXT: fucompi %st(3)
5733 ; GENERIC-NEXT: fucomi %st(3), %st
5734 ; GENERIC-NEXT: fucompi %st(3), %st
57355735 ; GENERIC-NEXT: #NO_APP
57365736 ; GENERIC-NEXT: retl
57375737 ;
57385738 ; ATOM-LABEL: test_fucomi_fucomip:
57395739 ; ATOM: # %bb.0:
57405740 ; ATOM-NEXT: #APP
5741 ; ATOM-NEXT: fucomi %st(3) # sched: [9:4.50]
5742 ; ATOM-NEXT: fucompi %st(3) # sched: [9:4.50]
5741 ; ATOM-NEXT: fucomi %st(3), %st # sched: [9:4.50]
5742 ; ATOM-NEXT: fucompi %st(3), %st # sched: [9:4.50]
57435743 ; ATOM-NEXT: #NO_APP
57445744 ; ATOM-NEXT: retl # sched: [79:39.50]
57455745 ;
57465746 ; SLM-LABEL: test_fucomi_fucomip:
57475747 ; SLM: # %bb.0:
57485748 ; SLM-NEXT: #APP
5749 ; SLM-NEXT: fucomi %st(3) # sched: [3:1.00]
5750 ; SLM-NEXT: fucompi %st(3) # sched: [3:1.00]
5749 ; SLM-NEXT: fucomi %st(3), %st # sched: [3:1.00]
5750 ; SLM-NEXT: fucompi %st(3), %st # sched: [3:1.00]
57515751 ; SLM-NEXT: #NO_APP
57525752 ; SLM-NEXT: retl # sched: [4:1.00]
57535753 ;
57545754 ; SANDY-LABEL: test_fucomi_fucomip:
57555755 ; SANDY: # %bb.0:
57565756 ; SANDY-NEXT: #APP
5757 ; SANDY-NEXT: fucomi %st(3) # sched: [3:1.00]
5758 ; SANDY-NEXT: fucompi %st(3) # sched: [3:1.00]
5757 ; SANDY-NEXT: fucomi %st(3), %st # sched: [3:1.00]
5758 ; SANDY-NEXT: fucompi %st(3), %st # sched: [3:1.00]
57595759 ; SANDY-NEXT: #NO_APP
57605760 ; SANDY-NEXT: retl # sched: [6:1.00]
57615761 ;
57625762 ; HASWELL-LABEL: test_fucomi_fucomip:
57635763 ; HASWELL: # %bb.0:
57645764 ; HASWELL-NEXT: #APP
5765 ; HASWELL-NEXT: fucomi %st(3) # sched: [1:0.50]
5766 ; HASWELL-NEXT: fucompi %st(3) # sched: [1:0.50]
5765 ; HASWELL-NEXT: fucomi %st(3), %st # sched: [1:0.50]
5766 ; HASWELL-NEXT: fucompi %st(3), %st # sched: [1:0.50]
57675767 ; HASWELL-NEXT: #NO_APP
57685768 ; HASWELL-NEXT: retl # sched: [7:1.00]
57695769 ;
57705770 ; BROADWELL-LABEL: test_fucomi_fucomip:
57715771 ; BROADWELL: # %bb.0:
57725772 ; BROADWELL-NEXT: #APP
5773 ; BROADWELL-NEXT: fucomi %st(3) # sched: [3:1.00]
5774 ; BROADWELL-NEXT: fucompi %st(3) # sched: [3:1.00]
5773 ; BROADWELL-NEXT: fucomi %st(3), %st # sched: [3:1.00]
5774 ; BROADWELL-NEXT: fucompi %st(3), %st # sched: [3:1.00]
57755775 ; BROADWELL-NEXT: #NO_APP
57765776 ; BROADWELL-NEXT: retl # sched: [6:0.50]
57775777 ;
57785778 ; SKYLAKE-LABEL: test_fucomi_fucomip:
57795779 ; SKYLAKE: # %bb.0:
57805780 ; SKYLAKE-NEXT: #APP
5781 ; SKYLAKE-NEXT: fucomi %st(3) # sched: [2:1.00]
5782 ; SKYLAKE-NEXT: fucompi %st(3) # sched: [2:1.00]
5781 ; SKYLAKE-NEXT: fucomi %st(3), %st # sched: [2:1.00]
5782 ; SKYLAKE-NEXT: fucompi %st(3), %st # sched: [2:1.00]
57835783 ; SKYLAKE-NEXT: #NO_APP
57845784 ; SKYLAKE-NEXT: retl # sched: [6:0.50]
57855785 ;
57865786 ; SKX-LABEL: test_fucomi_fucomip:
57875787 ; SKX: # %bb.0:
57885788 ; SKX-NEXT: #APP
5789 ; SKX-NEXT: fucomi %st(3) # sched: [2:1.00]
5790 ; SKX-NEXT: fucompi %st(3) # sched: [2:1.00]
5789 ; SKX-NEXT: fucomi %st(3), %st # sched: [2:1.00]
5790 ; SKX-NEXT: fucompi %st(3), %st # sched: [2:1.00]
57915791 ; SKX-NEXT: #NO_APP
57925792 ; SKX-NEXT: retl # sched: [6:0.50]
57935793 ;
57945794 ; BDVER2-LABEL: test_fucomi_fucomip:
57955795 ; BDVER2: # %bb.0:
57965796 ; BDVER2-NEXT: #APP
5797 ; BDVER2-NEXT: fucomi %st(3) # sched: [1:1.00]
5798 ; BDVER2-NEXT: fucompi %st(3) # sched: [1:1.00]
5797 ; BDVER2-NEXT: fucomi %st(3), %st # sched: [1:1.00]
5798 ; BDVER2-NEXT: fucompi %st(3), %st # sched: [1:1.00]
57995799 ; BDVER2-NEXT: #NO_APP
58005800 ; BDVER2-NEXT: retl # sched: [5:1.00]
58015801 ;
58025802 ; BTVER2-LABEL: test_fucomi_fucomip:
58035803 ; BTVER2: # %bb.0:
58045804 ; BTVER2-NEXT: #APP
5805 ; BTVER2-NEXT: fucomi %st(3) # sched: [3:1.00]
5806 ; BTVER2-NEXT: fucompi %st(3) # sched: [3:1.00]
5805 ; BTVER2-NEXT: fucomi %st(3), %st # sched: [3:1.00]
5806 ; BTVER2-NEXT: fucompi %st(3), %st # sched: [3:1.00]
58075807 ; BTVER2-NEXT: #NO_APP
58085808 ; BTVER2-NEXT: retl # sched: [4:1.00]
58095809 ;
58105810 ; ZNVER1-LABEL: test_fucomi_fucomip:
58115811 ; ZNVER1: # %bb.0:
58125812 ; ZNVER1-NEXT: #APP
5813 ; ZNVER1-NEXT: fucomi %st(3) # sched: [9:0.50]
5814 ; ZNVER1-NEXT: fucompi %st(3) # sched: [9:0.50]
5813 ; ZNVER1-NEXT: fucomi %st(3), %st # sched: [9:0.50]
5814 ; ZNVER1-NEXT: fucompi %st(3), %st # sched: [9:0.50]
58155815 ; ZNVER1-NEXT: #NO_APP
58165816 ; ZNVER1-NEXT: retl # sched: [1:0.50]
58175817 tail call void asm sideeffect "fucomi %st(3) \0A\09 fucomip %st(3)", ""() nounwind
0 # RUN: llvm-mc --disassemble %s -triple=x86_64 | FileCheck %s
11 # RUN: llvm-mc --disassemble %s -triple=i686-apple-darwin9 | FileCheck %s
22
3 # CHECK: fadd %st(0)
3 # CHECK: fadd %st(0), %st
44 0xd8,0xc0
55
6 # CHECK: fadd %st(1)
6 # CHECK: fadd %st(1), %st
77 0xd8,0xc1
88
9 # CHECK: fadd %st(2)
9 # CHECK: fadd %st(2), %st
1010 0xd8,0xc2
1111
12 # CHECK: fadd %st(3)
12 # CHECK: fadd %st(3), %st
1313 0xd8,0xc3
1414
15 # CHECK: fadd %st(4)
15 # CHECK: fadd %st(4), %st
1616 0xd8,0xc4
1717
18 # CHECK: fadd %st(5)
18 # CHECK: fadd %st(5), %st
1919 0xd8,0xc5
2020
21 # CHECK: fadd %st(6)
21 # CHECK: fadd %st(6), %st
2222 0xd8,0xc6
2323
24 # CHECK: fadd %st(7)
24 # CHECK: fadd %st(7), %st
2525 0xd8,0xc7
2626
27 # CHECK: fmul %st(0)
27 # CHECK: fmul %st(0), %st
2828 0xd8,0xc8
2929
30 # CHECK: fmul %st(1)
30 # CHECK: fmul %st(1), %st
3131 0xd8,0xc9
3232
33 # CHECK: fmul %st(2)
33 # CHECK: fmul %st(2), %st
3434 0xd8,0xca
3535
36 # CHECK: fmul %st(3)
36 # CHECK: fmul %st(3), %st
3737 0xd8,0xcb
3838
39 # CHECK: fmul %st(4)
39 # CHECK: fmul %st(4), %st
4040 0xd8,0xcc
4141
42 # CHECK: fmul %st(5)
42 # CHECK: fmul %st(5), %st
4343 0xd8,0xcd
4444
45 # CHECK: fmul %st(6)
45 # CHECK: fmul %st(6), %st
4646 0xd8,0xce
4747
48 # CHECK: fmul %st(7)
48 # CHECK: fmul %st(7), %st
4949 0xd8,0xcf
5050
5151 # CHECK: fcom %st(0)
9696 # CHECK: fcomp %st(7)
9797 0xd8,0xdf
9898
99 # CHECK: fsub %st(0)
99 # CHECK: fsub %st(0), %st
100100 0xd8,0xe0
101101
102 # CHECK: fsub %st(1)
102 # CHECK: fsub %st(1), %st
103103 0xd8,0xe1
104104
105 # CHECK: fsub %st(2)
105 # CHECK: fsub %st(2), %st
106106 0xd8,0xe2
107107
108 # CHECK: fsub %st(3)
108 # CHECK: fsub %st(3), %st
109109 0xd8,0xe3
110110
111 # CHECK: fsub %st(4)
111 # CHECK: fsub %st(4), %st
112112 0xd8,0xe4
113113
114 # CHECK: fsub %st(5)
114 # CHECK: fsub %st(5), %st
115115 0xd8,0xe5
116116
117 # CHECK: fsub %st(6)
117 # CHECK: fsub %st(6), %st
118118 0xd8,0xe6
119119
120 # CHECK: fsub %st(7)
120 # CHECK: fsub %st(7), %st
121121 0xd8,0xe7
122122
123 # CHECK: fsubr %st(0)
123 # CHECK: fsubr %st(0), %st
124124 0xd8,0xe8
125125
126 # CHECK: fsubr %st(1)
126 # CHECK: fsubr %st(1), %st
127127 0xd8,0xe9
128128
129 # CHECK: fsubr %st(2)
129 # CHECK: fsubr %st(2), %st
130130 0xd8,0xea
131131
132 # CHECK: fsubr %st(3)
132 # CHECK: fsubr %st(3), %st
133133 0xd8,0xeb
134134
135 # CHECK: fsubr %st(4)
135 # CHECK: fsubr %st(4), %st