forked from OSchip/llvm-project
[X86] Explicitly mark unsupported classes in scheduling models.
Summary: In preparation for D47721. HSW and SNB still define unsupported classes as they are used by KNL and generic models respectively. Reviewers: RKSimon Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D47763 llvm-svn: 334389
This commit is contained in:
parent
4cae35f6e4
commit
c48435bfe5
|
@ -212,22 +212,22 @@ defm : BWWriteResPair<WriteFMul64Y, [BWPort01], 3, [1], 1, 6>; // Floating point
|
|||
//defm : BWWriteResPair<WriteFDiv, [BWPort0,BWFPDivider], 11, [1,3], 1, 5>; // Floating point division.
|
||||
defm : BWWriteResPair<WriteFDivX, [BWPort0,BWFPDivider], 11, [1,5], 1, 5>; // Floating point division (XMM).
|
||||
defm : BWWriteResPair<WriteFDivY, [BWPort0,BWPort015,BWFPDivider], 17, [2,1,10], 3, 6>; // Floating point division (YMM).
|
||||
defm : BWWriteResPair<WriteFDivZ, [BWPort0,BWPort015,BWFPDivider], 17, [2,1,10], 3, 6>; // Floating point division (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFDivZ>;
|
||||
//defm : BWWriteResPair<WriteFDiv64, [BWPort0,BWFPDivider], 14, [1,8], 1, 5>; // Floating point division.
|
||||
defm : BWWriteResPair<WriteFDiv64X, [BWPort0,BWFPDivider], 14, [1,8], 1, 5>; // Floating point division (XMM).
|
||||
defm : BWWriteResPair<WriteFDiv64Y, [BWPort0,BWPort015,BWFPDivider], 23, [2,1,16], 3, 6>; // Floating point division (YMM).
|
||||
defm : BWWriteResPair<WriteFDiv64Z, [BWPort0,BWPort015,BWFPDivider], 23, [2,1,16], 3, 6>; // Floating point division (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
|
||||
|
||||
defm : X86WriteRes<WriteFSqrt, [BWPort0,BWFPDivider], 11, [1,4], 1>; // Floating point square root.
|
||||
defm : X86WriteRes<WriteFSqrtLd, [BWPort0,BWPort23,BWFPDivider], 16, [1,1,7], 2>;
|
||||
defm : BWWriteResPair<WriteFSqrtX, [BWPort0,BWFPDivider], 11, [1,7], 1, 5>; // Floating point square root (XMM).
|
||||
defm : BWWriteResPair<WriteFSqrtY, [BWPort0,BWPort015,BWFPDivider], 21, [2,1,14], 3, 6>; // Floating point square root (YMM).
|
||||
defm : BWWriteResPair<WriteFSqrtZ, [BWPort0,BWPort015,BWFPDivider], 21, [2,1,14], 3, 6>; // Floating point square root (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
|
||||
defm : X86WriteRes<WriteFSqrt64, [BWPort0,BWFPDivider], 16, [1,8], 1>; // Floating point double square root.
|
||||
defm : X86WriteRes<WriteFSqrt64Ld, [BWPort0,BWPort23,BWFPDivider], 21, [1,1,14], 2>;
|
||||
defm : BWWriteResPair<WriteFSqrt64X, [BWPort0,BWFPDivider], 16, [1,14],1, 5>; // Floating point double square root (XMM).
|
||||
defm : BWWriteResPair<WriteFSqrt64Y, [BWPort0,BWPort015,BWFPDivider], 29, [2,1,28], 3, 6>; // Floating point double square root (YMM).
|
||||
defm : BWWriteResPair<WriteFSqrt64Z, [BWPort0,BWPort015,BWFPDivider], 29, [2,1,28], 3, 6>; // Floating point double square root (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
|
||||
defm : BWWriteResPair<WriteFSqrt80, [BWPort0,BWFPDivider], 23, [1,9]>; // Floating point long double square root.
|
||||
|
||||
defm : BWWriteResPair<WriteFRcp, [BWPort0], 5, [1], 1, 5>; // Floating point reciprocal estimate.
|
||||
|
@ -1688,4 +1688,3 @@ def: InstRW<[BWWriteResGroup202], (instrs FSTENVm)>;
|
|||
def: InstRW<[WriteZero], (instrs CLC)>;
|
||||
|
||||
} // SchedModel
|
||||
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
// This file defines the machine model for Haswell to support instruction
|
||||
// scheduling and other instruction cost heuristics.
|
||||
//
|
||||
// Note that we define some instructions here that are not supported by haswell,
|
||||
// but we still have to define them because KNL uses the HSW model.
|
||||
// They are currently tagged with a comment `Unsupported = 1`.
|
||||
// FIXME: Use Unsupported = 1 once KNL has its own model.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
def HaswellModel : SchedMachineModel {
|
||||
|
@ -203,11 +208,11 @@ defm : HWWriteResPair<WriteFMul64Y, [HWPort01], 5, [1], 1, 7>;
|
|||
defm : HWWriteResPair<WriteFDiv, [HWPort0,HWFPDivider], 13, [1,7], 1, 5>;
|
||||
defm : HWWriteResPair<WriteFDivX, [HWPort0,HWFPDivider], 13, [1,7], 1, 6>;
|
||||
defm : HWWriteResPair<WriteFDivY, [HWPort0,HWPort15,HWFPDivider], 21, [2,1,14], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFDivZ, [HWPort0,HWPort15,HWFPDivider], 21, [2,1,14], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFDivZ, [HWPort0,HWPort15,HWFPDivider], 21, [2,1,14], 3, 7>; // Unsupported = 1
|
||||
defm : HWWriteResPair<WriteFDiv64, [HWPort0,HWFPDivider], 20, [1,14], 1, 5>;
|
||||
defm : HWWriteResPair<WriteFDiv64X, [HWPort0,HWFPDivider], 20, [1,14], 1, 6>;
|
||||
defm : HWWriteResPair<WriteFDiv64Y, [HWPort0,HWPort15,HWFPDivider], 35, [2,1,28], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFDiv64Z, [HWPort0,HWPort15,HWFPDivider], 35, [2,1,28], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFDiv64Z, [HWPort0,HWPort15,HWFPDivider], 35, [2,1,28], 3, 7>; // Unsupported = 1
|
||||
|
||||
defm : HWWriteResPair<WriteFRcp, [HWPort0], 5, [1], 1, 5>;
|
||||
defm : HWWriteResPair<WriteFRcpX, [HWPort0], 5, [1], 1, 6>;
|
||||
|
@ -220,11 +225,11 @@ defm : HWWriteResPair<WriteFRsqrtY,[HWPort0,HWPort015], 11, [2,1], 3, 7>;
|
|||
defm : HWWriteResPair<WriteFSqrt, [HWPort0,HWFPDivider], 11, [1,7], 1, 5>;
|
||||
defm : HWWriteResPair<WriteFSqrtX, [HWPort0,HWFPDivider], 11, [1,7], 1, 6>;
|
||||
defm : HWWriteResPair<WriteFSqrtY, [HWPort0,HWPort15,HWFPDivider], 21, [2,1,14], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFSqrtZ, [HWPort0,HWPort15,HWFPDivider], 21, [2,1,14], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFSqrtZ, [HWPort0,HWPort15,HWFPDivider], 21, [2,1,14], 3, 7>; // Unsupported = 1
|
||||
defm : HWWriteResPair<WriteFSqrt64, [HWPort0,HWFPDivider], 16, [1,14], 1, 5>;
|
||||
defm : HWWriteResPair<WriteFSqrt64X, [HWPort0,HWFPDivider], 16, [1,14], 1, 6>;
|
||||
defm : HWWriteResPair<WriteFSqrt64Y, [HWPort0,HWPort15,HWFPDivider], 35, [2,1,28], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFSqrt64Z, [HWPort0,HWPort15,HWFPDivider], 35, [2,1,28], 3, 7>;
|
||||
defm : HWWriteResPair<WriteFSqrt64Z, [HWPort0,HWPort15,HWFPDivider], 35, [2,1,28], 3, 7>; // Unsupported = 1
|
||||
defm : HWWriteResPair<WriteFSqrt80, [HWPort0,HWFPDivider], 23, [1,17]>;
|
||||
|
||||
defm : HWWriteResPair<WriteFMA, [HWPort01], 5, [1], 1, 5>;
|
||||
|
|
|
@ -10,6 +10,10 @@
|
|||
// This file defines the machine model for Sandy Bridge to support instruction
|
||||
// scheduling and other instruction cost heuristics.
|
||||
//
|
||||
// Note that we define some instructions here that are not supported by SNB,
|
||||
// but we still have to define them because SNB is the default subtarget for
|
||||
// X86. These instructions are tagged with a comment `Unsupported = 1`.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
def SandyBridgeModel : SchedMachineModel {
|
||||
|
@ -195,11 +199,11 @@ defm : SBWriteResPair<WriteFMul64Y, [SBPort0], 5, [1], 1, 7>;
|
|||
defm : SBWriteResPair<WriteFDiv, [SBPort0,SBFPDivider], 14, [1,14], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFDivX, [SBPort0,SBFPDivider], 14, [1,14], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFDivY, [SBPort0,SBPort05,SBFPDivider], 29, [2,1,28], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFDivZ, [SBPort0,SBPort05,SBFPDivider], 29, [2,1,28], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFDivZ, [SBPort0,SBPort05,SBFPDivider], 29, [2,1,28], 3, 7>; // Unsupported = 1
|
||||
defm : SBWriteResPair<WriteFDiv64, [SBPort0,SBFPDivider], 22, [1,22], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFDiv64X, [SBPort0,SBFPDivider], 22, [1,22], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFDiv64Y, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFDiv64Z, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFDiv64Z, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>; // Unsupported = 1
|
||||
|
||||
defm : SBWriteResPair<WriteFRcp, [SBPort0], 5, [1], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFRcpX, [SBPort0], 5, [1], 1, 6>;
|
||||
|
@ -212,11 +216,11 @@ defm : SBWriteResPair<WriteFRsqrtY,[SBPort0,SBPort05], 7, [2,1], 3, 7>;
|
|||
defm : SBWriteResPair<WriteFSqrt, [SBPort0,SBFPDivider], 14, [1,14], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFSqrtX, [SBPort0,SBFPDivider], 14, [1,14], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFSqrtY, [SBPort0,SBPort05,SBFPDivider], 29, [2,1,28], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFSqrtZ, [SBPort0,SBPort05,SBFPDivider], 29, [2,1,28], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFSqrtZ, [SBPort0,SBPort05,SBFPDivider], 29, [2,1,28], 3, 7>; // Unsupported = 1
|
||||
defm : SBWriteResPair<WriteFSqrt64, [SBPort0,SBFPDivider], 21, [1,21], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFSqrt64X, [SBPort0,SBFPDivider], 21, [1,21], 1, 6>;
|
||||
defm : SBWriteResPair<WriteFSqrt64Y, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFSqrt64Z, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>;
|
||||
defm : SBWriteResPair<WriteFSqrt64Z, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>; // Unsupported = 1
|
||||
defm : SBWriteResPair<WriteFSqrt80, [SBPort0,SBFPDivider], 24, [1,24], 1, 6>;
|
||||
|
||||
defm : SBWriteResPair<WriteDPPD, [SBPort0,SBPort1,SBPort5], 9, [1,1,1], 3, 6>;
|
||||
|
|
|
@ -208,20 +208,20 @@ defm : SKLWriteResPair<WriteFMul64Y, [SKLPort01], 4, [1], 1, 7>; // Floating p
|
|||
defm : SKLWriteResPair<WriteFDiv, [SKLPort0,SKLFPDivider], 11, [1,3], 1, 5>; // Floating point division.
|
||||
//defm : SKLWriteResPair<WriteFDivX, [SKLPort0,SKLFPDivider], 11, [1,3], 1, 6>; // Floating point division (XMM).
|
||||
defm : SKLWriteResPair<WriteFDivY, [SKLPort0,SKLFPDivider], 11, [1,5], 1, 7>; // Floating point division (YMM).
|
||||
defm : SKLWriteResPair<WriteFDivZ, [SKLPort0,SKLFPDivider], 11, [1,5], 1, 7>; // Floating point division (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFDivZ>;
|
||||
//defm : SKLWriteResPair<WriteFDiv64, [SKLPort0,SKLFPDivider], 14, [1,3], 1, 5>; // Floating point double division.
|
||||
//defm : SKLWriteResPair<WriteFDiv64X, [SKLPort0,SKLFPDivider], 14, [1,3], 1, 6>; // Floating point double division (XMM).
|
||||
//defm : SKLWriteResPair<WriteFDiv64Y, [SKLPort0,SKLFPDivider], 14, [1,5], 1, 7>; // Floating point double division (YMM).
|
||||
defm : SKLWriteResPair<WriteFDiv64Z, [SKLPort0,SKLFPDivider], 14, [1,5], 1, 7>; // Floating point double division (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
|
||||
|
||||
defm : SKLWriteResPair<WriteFSqrt, [SKLPort0,SKLFPDivider], 12, [1,3], 1, 5>; // Floating point square root.
|
||||
defm : SKLWriteResPair<WriteFSqrtX, [SKLPort0,SKLFPDivider], 12, [1,3], 1, 6>; // Floating point square root (XMM).
|
||||
defm : SKLWriteResPair<WriteFSqrtY, [SKLPort0,SKLFPDivider], 12, [1,6], 1, 7>; // Floating point square root (YMM).
|
||||
defm : SKLWriteResPair<WriteFSqrtZ, [SKLPort0,SKLFPDivider], 12, [1,6], 1, 7>; // Floating point square root (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
|
||||
defm : SKLWriteResPair<WriteFSqrt64, [SKLPort0,SKLFPDivider], 18, [1,6], 1, 5>; // Floating point double square root.
|
||||
defm : SKLWriteResPair<WriteFSqrt64X, [SKLPort0,SKLFPDivider], 18, [1,6], 1, 6>; // Floating point double square root (XMM).
|
||||
defm : SKLWriteResPair<WriteFSqrt64Y, [SKLPort0,SKLFPDivider], 18, [1,12],1, 7>; // Floating point double square root (YMM).
|
||||
defm : SKLWriteResPair<WriteFSqrt64Z, [SKLPort0,SKLFPDivider], 18, [1,12],1, 7>; // Floating point double square root (ZMM).
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
|
||||
defm : SKLWriteResPair<WriteFSqrt80, [SKLPort0,SKLFPDivider], 21, [1,7]>; // Floating point long double square root.
|
||||
|
||||
defm : SKLWriteResPair<WriteFRcp, [SKLPort0], 4, [1], 1, 5>; // Floating point reciprocal estimate.
|
||||
|
|
|
@ -49,6 +49,20 @@ multiclass X86SchedWritePair {
|
|||
}
|
||||
}
|
||||
|
||||
// Helpers to mark SchedWrites as unsupported.
|
||||
multiclass X86WriteResUnsupported<SchedWrite SchedRW> {
|
||||
let Unsupported = 1 in {
|
||||
def : WriteRes<SchedRW, []>;
|
||||
}
|
||||
}
|
||||
multiclass X86WriteResPairUnsupported<X86FoldableSchedWrite SchedRW> {
|
||||
let Unsupported = 1 in {
|
||||
def : WriteRes<SchedRW, []>;
|
||||
def : WriteRes<SchedRW.Folded, []>;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Multiclass that wraps X86FoldableSchedWrite for each vector width.
|
||||
class X86SchedWriteWidths<X86FoldableSchedWrite sScl,
|
||||
X86FoldableSchedWrite s128,
|
||||
|
@ -598,4 +612,3 @@ def GenericModel : GenericX86Model;
|
|||
def GenericPostRAModel : GenericX86Model {
|
||||
let PostRAScheduler = 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -90,7 +90,7 @@ defm : AtomWriteResPair<WriteIDiv16, [AtomPort01], [AtomPort01], 62, 62, [62], [
|
|||
defm : AtomWriteResPair<WriteIDiv32, [AtomPort01], [AtomPort01], 62, 62, [62], [62]>;
|
||||
defm : AtomWriteResPair<WriteIDiv64, [AtomPort01], [AtomPort01],130,130,[130],[130]>;
|
||||
|
||||
defm : AtomWriteResPair<WriteCRC32, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteCRC32>;
|
||||
|
||||
defm : AtomWriteResPair<WriteCMOV, [AtomPort01], [AtomPort0]>;
|
||||
defm : AtomWriteResPair<WriteCMOV2, [AtomPort01], [AtomPort0]>;
|
||||
|
@ -102,7 +102,7 @@ def : WriteRes<WriteSETCCStore, [AtomPort01]> {
|
|||
let ResourceCycles = [2];
|
||||
}
|
||||
|
||||
def : WriteRes<WriteIMulH, [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResUnsupported<WriteIMulH>;
|
||||
|
||||
// This is for simple LEAs with one or two input operands.
|
||||
def : WriteRes<WriteLEA, [AtomPort1]>;
|
||||
|
@ -128,13 +128,13 @@ def : InstRW<[AtomWriteIMul64I], (instrs IMUL64rri8, IMUL64rri32,
|
|||
|
||||
// Bit counts.
|
||||
defm : AtomWriteResPair<WriteBitScan, [AtomPort01], [AtomPort01], 16, 16, [16], [16]>;
|
||||
defm : AtomWriteResPair<WritePOPCNT, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteLZCNT, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteTZCNT, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WritePOPCNT>;
|
||||
defm : X86WriteResPairUnsupported<WriteLZCNT>;
|
||||
defm : X86WriteResPairUnsupported<WriteTZCNT>;
|
||||
|
||||
// BMI1 BEXTR, BMI2 BZHI
|
||||
defm : AtomWriteResPair<WriteBEXTR, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteBZHI, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteBEXTR>;
|
||||
defm : X86WriteResPairUnsupported<WriteBZHI>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Integer shifts and rotates.
|
||||
|
@ -235,43 +235,43 @@ defm : AtomWriteResPair<WriteFRsqrtY, [AtomPort01], [AtomPort01], 9, 10,
|
|||
defm : AtomWriteResPair<WriteFDiv, [AtomPort01], [AtomPort01], 34, 34, [34], [34]>;
|
||||
defm : AtomWriteResPair<WriteFDivX, [AtomPort01], [AtomPort01], 70, 70, [70], [70]>;
|
||||
defm : AtomWriteResPair<WriteFDivY, [AtomPort01], [AtomPort01], 70, 70, [70], [70]>;
|
||||
defm : AtomWriteResPair<WriteFDivZ, [AtomPort01], [AtomPort01], 70, 70, [70], [70]>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDivZ>;
|
||||
defm : AtomWriteResPair<WriteFDiv64, [AtomPort01], [AtomPort01], 62, 62, [62], [62]>;
|
||||
defm : AtomWriteResPair<WriteFDiv64X, [AtomPort01], [AtomPort01],125,125,[125],[125]>;
|
||||
defm : AtomWriteResPair<WriteFDiv64Y, [AtomPort01], [AtomPort01],125,125,[125],[125]>;
|
||||
defm : AtomWriteResPair<WriteFDiv64Z, [AtomPort01], [AtomPort01],125,125,[125],[125]>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
|
||||
defm : AtomWriteResPair<WriteFSqrt, [AtomPort01], [AtomPort01], 34, 34, [34], [34]>;
|
||||
defm : AtomWriteResPair<WriteFSqrtX, [AtomPort01], [AtomPort01], 70, 70, [70], [70]>;
|
||||
defm : AtomWriteResPair<WriteFSqrtY, [AtomPort01], [AtomPort01], 70, 70, [70], [70]>;
|
||||
defm : AtomWriteResPair<WriteFSqrtZ, [AtomPort01], [AtomPort01], 70, 70, [70], [70]>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
|
||||
defm : AtomWriteResPair<WriteFSqrt64, [AtomPort01], [AtomPort01], 62, 62, [62], [62]>;
|
||||
defm : AtomWriteResPair<WriteFSqrt64X, [AtomPort01], [AtomPort01],125,125,[125],[125]>;
|
||||
defm : AtomWriteResPair<WriteFSqrt64Y, [AtomPort01], [AtomPort01],125,125,[125],[125]>;
|
||||
defm : AtomWriteResPair<WriteFSqrt64Z, [AtomPort01], [AtomPort01],125,125,[125],[125]>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
|
||||
defm : AtomWriteResPair<WriteFSqrt80, [AtomPort01], [AtomPort01], 71, 71, [71], [71]>;
|
||||
defm : AtomWriteResPair<WriteFSign, [AtomPort1], [AtomPort1]>;
|
||||
defm : AtomWriteResPair<WriteFRnd, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>;
|
||||
defm : AtomWriteResPair<WriteFRndY, [AtomPort0], [AtomPort0], 5, 5, [5], [5]>;
|
||||
defm : AtomWriteResPair<WriteFLogic, [AtomPort01], [AtomPort0]>;
|
||||
defm : AtomWriteResPair<WriteFLogicY, [AtomPort01], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteFLogicY>;
|
||||
defm : AtomWriteResPair<WriteFTest, [AtomPort01], [AtomPort0]>;
|
||||
defm : AtomWriteResPair<WriteFTestY , [AtomPort01], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteFTestY>;
|
||||
defm : AtomWriteResPair<WriteFShuffle, [AtomPort0], [AtomPort0]>;
|
||||
defm : AtomWriteResPair<WriteFShuffleY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFVarShuffle, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFVarShuffleY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFMA, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFMAX, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFMAY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteDPPD, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteDPPS, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteDPPSY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFBlend, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFBlendY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFVarBlend, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFVarBlendY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFShuffle256, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteFVarShuffle256, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteFShuffleY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarShuffle>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarShuffleY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMA>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMAX>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMAY>;
|
||||
defm : X86WriteResPairUnsupported<WriteDPPD>;
|
||||
defm : X86WriteResPairUnsupported<WriteDPPS>;
|
||||
defm : X86WriteResPairUnsupported<WriteDPPSY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFBlend>;
|
||||
defm : X86WriteResPairUnsupported<WriteFBlendY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarBlend>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarBlendY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarShuffle256>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Conversions.
|
||||
|
@ -298,12 +298,12 @@ defm : AtomWriteResPair<WriteCvtSD2SS, [AtomPort01], [AtomPort01], 6, 7, [6], [
|
|||
defm : AtomWriteResPair<WriteCvtPD2PS, [AtomPort01], [AtomPort01], 7, 8, [7], [8]>;
|
||||
defm : AtomWriteResPair<WriteCvtPD2PSY, [AtomPort01], [AtomPort01], 7, 8, [7], [8]>;
|
||||
|
||||
defm : AtomWriteResPair<WriteCvtPH2PS, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteCvtPH2PSY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
def : WriteRes<WriteCvtPS2PH, [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
def : WriteRes<WriteCvtPS2PHY, [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
def : WriteRes<WriteCvtPS2PHSt, [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
def : WriteRes<WriteCvtPS2PHYSt, [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteCvtPH2PS>;
|
||||
defm : X86WriteResPairUnsupported<WriteCvtPH2PSY>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PH>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PHSt>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PHY>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PHYSt>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Vector integer operations.
|
||||
|
@ -362,14 +362,14 @@ defm : AtomWriteResPair<WriteShuffleY, [AtomPort0], [AtomPort0], 1, 1>;
|
|||
defm : AtomWriteResPair<WriteVarShuffle, [AtomPort0], [AtomPort0], 1, 1>;
|
||||
defm : AtomWriteResPair<WriteVarShuffleX, [AtomPort01], [AtomPort01], 4, 5, [4], [5]>;
|
||||
defm : AtomWriteResPair<WriteVarShuffleY, [AtomPort01], [AtomPort01], 4, 5, [4], [5]>;
|
||||
defm : AtomWriteResPair<WriteBlend, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteBlendY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteVarBlend, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteVarBlendY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteShuffle256, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteVarShuffle256, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteVarVecShift, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteVarVecShiftY, [AtomPort0], [AtomPort0]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteBlend>;
|
||||
defm : X86WriteResPairUnsupported<WriteBlendY>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarBlend>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarBlendY>;
|
||||
defm : X86WriteResPairUnsupported<WriteShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShift>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShiftY>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Vector insert/extract operations.
|
||||
|
@ -383,10 +383,10 @@ def : WriteRes<WriteVecExtractSt, [AtomPort0]>;
|
|||
// SSE42 String instructions.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
defm : AtomWriteResPair<WritePCmpIStrI, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WritePCmpIStrM, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WritePCmpEStrI, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WritePCmpEStrM, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WritePCmpIStrI>;
|
||||
defm : X86WriteResPairUnsupported<WritePCmpIStrM>;
|
||||
defm : X86WriteResPairUnsupported<WritePCmpEStrI>;
|
||||
defm : X86WriteResPairUnsupported<WritePCmpEStrM>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// MOVMSK Instructions.
|
||||
|
@ -398,12 +398,12 @@ def : WriteRes<WriteVecMOVMSKY, [AtomPort0]> { let Latency = 3; let ResourceCycl
|
|||
def : WriteRes<WriteMMXMOVMSK, [AtomPort0]> { let Latency = 3; let ResourceCycles = [3]; }
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// AES Instructions.
|
||||
// AES instructions.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
defm : AtomWriteResPair<WriteAESIMC, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteAESKeyGen, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : AtomWriteResPair<WriteAESDecEnc, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteAESIMC>;
|
||||
defm : X86WriteResPairUnsupported<WriteAESKeyGen>;
|
||||
defm : X86WriteResPairUnsupported<WriteAESDecEnc>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Horizontal add/sub instructions.
|
||||
|
@ -419,7 +419,7 @@ defm : AtomWriteResPair<WritePHAddY, [AtomPort01], [AtomPort01], 7, 8, [7], [8]>
|
|||
// Carry-less multiplication instructions.
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
defm : AtomWriteResPair<WriteCLMul, [AtomPort01], [AtomPort01]>; // NOTE: Doesn't exist on Atom.
|
||||
defm : X86WriteResPairUnsupported<WriteCLMul>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Load/store MXCSR.
|
||||
|
|
|
@ -190,7 +190,7 @@ defm : JWriteResIntPair<WriteTZCNT, [JALU01], 2, [2]>;
|
|||
|
||||
// BMI1 BEXTR, BMI2 BZHI
|
||||
defm : JWriteResIntPair<WriteBEXTR, [JALU01], 1>;
|
||||
defm : JWriteResIntPair<WriteBZHI, [JALU01], 1>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : X86WriteResPairUnsupported<WriteBZHI>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Integer shifts and rotates.
|
||||
|
@ -314,9 +314,9 @@ defm : JWriteResYMMPair<WriteFMulY, [JFPU1, JFPM], 2, [2,2], 2>;
|
|||
defm : JWriteResFpuPair<WriteFMul64, [JFPU1, JFPM], 4, [1,2]>;
|
||||
defm : JWriteResFpuPair<WriteFMul64X, [JFPU1, JFPM], 4, [1,2]>;
|
||||
defm : JWriteResYMMPair<WriteFMul64Y, [JFPU1, JFPM], 4, [2,4], 2>;
|
||||
defm : JWriteResFpuPair<WriteFMA, [JFPU1, JFPM], 2>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : JWriteResFpuPair<WriteFMAX, [JFPU1, JFPM], 2>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : JWriteResFpuPair<WriteFMAY, [JFPU1, JFPM], 2>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : X86WriteResPairUnsupported<WriteFMA>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMAX>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMAY>;
|
||||
defm : JWriteResFpuPair<WriteDPPD, [JFPU1, JFPM, JFPA], 9, [1, 3, 3], 3>;
|
||||
defm : JWriteResFpuPair<WriteDPPS, [JFPU1, JFPM, JFPA], 11, [1, 3, 3], 5>;
|
||||
defm : JWriteResYMMPair<WriteDPPSY, [JFPU1, JFPM, JFPA], 12, [2, 6, 6], 10>;
|
||||
|
@ -329,19 +329,19 @@ defm : JWriteResYMMPair<WriteFRsqrtY, [JFPU1, JFPM], 2, [2,2], 2>;
|
|||
defm : JWriteResFpuPair<WriteFDiv, [JFPU1, JFPM], 19, [1, 19]>;
|
||||
defm : JWriteResFpuPair<WriteFDivX, [JFPU1, JFPM], 19, [1, 19]>;
|
||||
defm : JWriteResYMMPair<WriteFDivY, [JFPU1, JFPM], 38, [2, 38], 2>;
|
||||
defm : JWriteResYMMPair<WriteFDivZ, [JFPU1, JFPM], 38, [2, 38], 2>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDivZ>;
|
||||
defm : JWriteResFpuPair<WriteFDiv64, [JFPU1, JFPM], 19, [1, 19]>;
|
||||
defm : JWriteResFpuPair<WriteFDiv64X, [JFPU1, JFPM], 19, [1, 19]>;
|
||||
defm : JWriteResYMMPair<WriteFDiv64Y, [JFPU1, JFPM], 38, [2, 38], 2>;
|
||||
defm : JWriteResYMMPair<WriteFDiv64Z, [JFPU1, JFPM], 38, [2, 38], 2>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
|
||||
defm : JWriteResFpuPair<WriteFSqrt, [JFPU1, JFPM], 21, [1, 21]>;
|
||||
defm : JWriteResFpuPair<WriteFSqrtX, [JFPU1, JFPM], 21, [1, 21]>;
|
||||
defm : JWriteResYMMPair<WriteFSqrtY, [JFPU1, JFPM], 42, [2, 42], 2>;
|
||||
defm : JWriteResYMMPair<WriteFSqrtZ, [JFPU1, JFPM], 42, [2, 42], 2>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
|
||||
defm : JWriteResFpuPair<WriteFSqrt64, [JFPU1, JFPM], 27, [1, 27]>;
|
||||
defm : JWriteResFpuPair<WriteFSqrt64X, [JFPU1, JFPM], 27, [1, 27]>;
|
||||
defm : JWriteResYMMPair<WriteFSqrt64Y, [JFPU1, JFPM], 54, [2, 54], 2>;
|
||||
defm : JWriteResYMMPair<WriteFSqrt64Z, [JFPU1, JFPM], 54, [2, 54], 2>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
|
||||
defm : JWriteResFpuPair<WriteFSqrt80, [JFPU1, JFPM], 35, [1, 35]>;
|
||||
defm : JWriteResFpuPair<WriteFSign, [JFPU1, JFPM], 2>;
|
||||
defm : JWriteResFpuPair<WriteFRnd, [JFPU1, JSTC], 3>;
|
||||
|
@ -359,7 +359,7 @@ defm : JWriteResYMMPair<WriteFBlendY, [JFPU01, JFPX], 1, [2, 2], 2>;
|
|||
defm : JWriteResFpuPair<WriteFVarBlend, [JFPU01, JFPX], 2, [1, 4], 3>;
|
||||
defm : JWriteResYMMPair<WriteFVarBlendY, [JFPU01, JFPX], 3, [2, 6], 6>;
|
||||
defm : JWriteResFpuPair<WriteFShuffle256, [JFPU01, JFPX], 1>;
|
||||
defm : JWriteResFpuPair<WriteFVarShuffle256, [JFPU01, JFPX], 1>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : X86WriteResPairUnsupported<WriteFVarShuffle256>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Conversions.
|
||||
|
@ -454,13 +454,13 @@ defm : JWriteResFpuPair<WriteVarBlend, [JFPU01, JVALU], 2, [1, 4], 3>;
|
|||
defm : JWriteResFpuPair<WriteVarBlendY, [JFPU01, JVALU], 2, [1, 4], 3>;
|
||||
defm : JWriteResFpuPair<WriteVecLogic, [JFPU01, JVALU], 1>;
|
||||
defm : JWriteResFpuPair<WriteVecLogicX, [JFPU01, JVALU], 1>;
|
||||
defm : JWriteResFpuPair<WriteVecLogicY, [JFPU01, JVALU], 1>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : X86WriteResPairUnsupported<WriteVecLogicY>;
|
||||
defm : JWriteResFpuPair<WriteVecTest, [JFPU0, JFPA, JALU0], 3>;
|
||||
defm : JWriteResYMMPair<WriteVecTestY , [JFPU01, JFPX, JFPA, JALU0], 4, [2, 2, 2, 1], 3>;
|
||||
defm : JWriteResFpuPair<WriteShuffle256, [JFPU01, JVALU], 1>;
|
||||
defm : JWriteResFpuPair<WriteVarShuffle256, [JFPU01, JVALU], 1>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : JWriteResFpuPair<WriteVarVecShift, [JFPU01, JVALU], 1>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : JWriteResFpuPair<WriteVarVecShiftY,[JFPU01, JVALU], 1>; // NOTE: Doesn't exist on Jaguar.
|
||||
defm : X86WriteResPairUnsupported<WriteVarShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShift>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShiftY>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Vector insert/extract operations.
|
||||
|
|
|
@ -122,9 +122,8 @@ defm : SLMWriteResPair<WriteTZCNT, [SLM_IEC_RSV0], 3>;
|
|||
defm : SLMWriteResPair<WritePOPCNT, [SLM_IEC_RSV0], 3>;
|
||||
|
||||
// BMI1 BEXTR, BMI2 BZHI
|
||||
// NOTE: These don't exist on Silvermont. Ports are guesses.
|
||||
defm : SLMWriteResPair<WriteBEXTR, [SLM_IEC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteBZHI, [SLM_IEC_RSV0], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteBEXTR>;
|
||||
defm : X86WriteResPairUnsupported<WriteBZHI>;
|
||||
|
||||
defm : SLMWriteResPair<WriteDiv8, [SLM_IEC_RSV01, SLMDivider], 25, [1,25], 1, 4>;
|
||||
defm : SLMWriteResPair<WriteDiv16, [SLM_IEC_RSV01, SLMDivider], 25, [1,25], 1, 4>;
|
||||
|
@ -179,11 +178,11 @@ defm : SLMWriteResPair<WriteFMul64Y, [SLM_FPC_RSV0, SLMFPMultiplier], 5, [1,2]>
|
|||
defm : SLMWriteResPair<WriteFDiv, [SLM_FPC_RSV0, SLMFPDivider], 19, [1,17]>;
|
||||
defm : SLMWriteResPair<WriteFDivX, [SLM_FPC_RSV0, SLMFPDivider], 39, [1,39]>;
|
||||
defm : SLMWriteResPair<WriteFDivY, [SLM_FPC_RSV0, SLMFPDivider], 39, [1,39]>;
|
||||
defm : SLMWriteResPair<WriteFDivZ, [SLM_FPC_RSV0, SLMFPDivider], 39, [1,39]>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDivZ>;
|
||||
defm : SLMWriteResPair<WriteFDiv64, [SLM_FPC_RSV0, SLMFPDivider], 34, [1,32]>;
|
||||
defm : SLMWriteResPair<WriteFDiv64X, [SLM_FPC_RSV0, SLMFPDivider], 69, [1,69]>;
|
||||
defm : SLMWriteResPair<WriteFDiv64Y, [SLM_FPC_RSV0, SLMFPDivider], 69, [1,69]>;
|
||||
defm : SLMWriteResPair<WriteFDiv64Z, [SLM_FPC_RSV0, SLMFPDivider], 69, [1,69]>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
|
||||
defm : SLMWriteResPair<WriteFRcp, [SLM_FPC_RSV0], 5>;
|
||||
defm : SLMWriteResPair<WriteFRcpX, [SLM_FPC_RSV0], 5>;
|
||||
defm : SLMWriteResPair<WriteFRcpY, [SLM_FPC_RSV0], 5>;
|
||||
|
@ -193,11 +192,11 @@ defm : SLMWriteResPair<WriteFRsqrtY, [SLM_FPC_RSV0], 5>;
|
|||
defm : SLMWriteResPair<WriteFSqrt, [SLM_FPC_RSV0,SLMFPDivider], 20, [1,20], 1, 3>;
|
||||
defm : SLMWriteResPair<WriteFSqrtX, [SLM_FPC_RSV0,SLMFPDivider], 41, [1,40], 1, 3>;
|
||||
defm : SLMWriteResPair<WriteFSqrtY, [SLM_FPC_RSV0,SLMFPDivider], 41, [1,40], 1, 3>;
|
||||
defm : SLMWriteResPair<WriteFSqrtZ, [SLM_FPC_RSV0,SLMFPDivider], 41, [1,40], 1, 3>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
|
||||
defm : SLMWriteResPair<WriteFSqrt64, [SLM_FPC_RSV0,SLMFPDivider], 35, [1,35], 1, 3>;
|
||||
defm : SLMWriteResPair<WriteFSqrt64X, [SLM_FPC_RSV0,SLMFPDivider], 71, [1,70], 1, 3>;
|
||||
defm : SLMWriteResPair<WriteFSqrt64Y, [SLM_FPC_RSV0,SLMFPDivider], 71, [1,70], 1, 3>;
|
||||
defm : SLMWriteResPair<WriteFSqrt64Z, [SLM_FPC_RSV0,SLMFPDivider], 71, [1,70], 1, 3>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
|
||||
defm : SLMWriteResPair<WriteFSqrt80, [SLM_FPC_RSV0,SLMFPDivider], 40, [1,40]>;
|
||||
defm : SLMWriteResPair<WriteDPPD, [SLM_FPC_RSV1], 3>;
|
||||
defm : SLMWriteResPair<WriteDPPS, [SLM_FPC_RSV1], 3>;
|
||||
|
@ -407,26 +406,26 @@ def : WriteRes<WriteNop, []>;
|
|||
// AVX/FMA is not supported on that architecture, but we should define the basic
|
||||
// scheduling resources anyway.
|
||||
def : WriteRes<WriteIMulH, [SLM_FPC_RSV0]>;
|
||||
defm : SLMWriteResPair<WriteFBlendY, [SLM_FPC_RSV0], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteFBlendY>;
|
||||
defm : SLMWriteResPair<WriteVarBlend, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteVarBlendY,[SLM_FPC_RSV0], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarBlendY>;
|
||||
defm : SLMWriteResPair<WriteFVarBlend, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteFVarBlendY, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteFShuffle256, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteFVarShuffle256, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteShuffle256, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteVarShuffle256, [SLM_FPC_RSV0], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarBlendY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteFVarShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteShuffle256>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarShuffle256>;
|
||||
defm : SLMWriteResPair<WriteVarVecShift, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteVarVecShiftY, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteFMA, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteFMAX, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteFMAY, [SLM_FPC_RSV0], 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteVarVecShiftY>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMA>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMAX>;
|
||||
defm : X86WriteResPairUnsupported<WriteFMAY>;
|
||||
|
||||
defm : SLMWriteResPair<WriteCvtPH2PS, [SLM_FPC_RSV0], 1>;
|
||||
defm : SLMWriteResPair<WriteCvtPH2PSY, [SLM_FPC_RSV0], 1>;
|
||||
def : WriteRes<WriteCvtPS2PH, [SLM_FPC_RSV0]>;
|
||||
def : WriteRes<WriteCvtPS2PHY, [SLM_FPC_RSV0]>;
|
||||
def : WriteRes<WriteCvtPS2PHSt, [SLM_FPC_RSV0]>;
|
||||
def : WriteRes<WriteCvtPS2PHYSt, [SLM_FPC_RSV0]>;
|
||||
defm : X86WriteResPairUnsupported<WriteCvtPH2PS>;
|
||||
defm : X86WriteResPairUnsupported<WriteCvtPH2PSY>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PH>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PHY>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PHSt>;
|
||||
defm : X86WriteResUnsupported<WriteCvtPS2PHYSt>;
|
||||
|
||||
} // SchedModel
|
||||
|
|
|
@ -243,11 +243,11 @@ defm : ZnWriteResFpuPair<WriteCvtI2PDY, [ZnFPU3], 5>;
|
|||
defm : ZnWriteResFpuPair<WriteFDiv, [ZnFPU3], 15>;
|
||||
defm : ZnWriteResFpuPair<WriteFDivX, [ZnFPU3], 15>;
|
||||
//defm : ZnWriteResFpuPair<WriteFDivY, [ZnFPU3], 15>;
|
||||
defm : ZnWriteResFpuPair<WriteFDivZ, [ZnFPU3], 15>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDivZ>;
|
||||
defm : ZnWriteResFpuPair<WriteFDiv64, [ZnFPU3], 15>;
|
||||
defm : ZnWriteResFpuPair<WriteFDiv64X, [ZnFPU3], 15>;
|
||||
//defm : ZnWriteResFpuPair<WriteFDiv64Y, [ZnFPU3], 15>;
|
||||
defm : ZnWriteResFpuPair<WriteFDiv64Z, [ZnFPU3], 15>;
|
||||
defm : X86WriteResPairUnsupported<WriteFDiv64Z>;
|
||||
defm : ZnWriteResFpuPair<WriteFSign, [ZnFPU3], 2>;
|
||||
defm : ZnWriteResFpuPair<WriteFRnd, [ZnFPU3], 4, [1], 1, 7, 1>; // FIXME: Should folds require 1 extra uops?
|
||||
defm : ZnWriteResFpuPair<WriteFRndY, [ZnFPU3], 4, [1], 1, 7, 1>; // FIXME: Should folds require 1 extra uops?
|
||||
|
@ -277,11 +277,11 @@ defm : ZnWriteResFpuPair<WriteFRsqrtX, [ZnFPU01], 5, [1], 1, 7, 1>;
|
|||
defm : ZnWriteResFpuPair<WriteFSqrt, [ZnFPU3], 20, [20]>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrtX, [ZnFPU3], 20, [20]>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrtY, [ZnFPU3], 28, [28], 1, 7, 1>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrtZ, [ZnFPU3], 28, [28], 1, 7, 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrtZ>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrt64, [ZnFPU3], 20, [20]>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrt64X, [ZnFPU3], 20, [20]>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrt64Y, [ZnFPU3], 40, [40], 1, 7, 1>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrt64Z, [ZnFPU3], 40, [40], 1, 7, 1>;
|
||||
defm : X86WriteResPairUnsupported<WriteFSqrt64Z>;
|
||||
defm : ZnWriteResFpuPair<WriteFSqrt80, [ZnFPU3], 20, [20]>;
|
||||
|
||||
// Vector integer operations which uses FPU units
|
||||
|
|
Loading…
Reference in New Issue