"(V?)MOVUPS(Y?)rr",
"(V?)ORPD(Y?)rr",
"(V?)ORPS(Y?)rr",
- "(V?)PACKSSDW(Y?)rr",
- "(V?)PACKSSWB(Y?)rr",
- "(V?)PACKUSDW(Y?)rr",
- "(V?)PACKUSWB(Y?)rr",
"(V?)PALIGNR(Y?)rri",
"(V?)PBLENDW(Y?)rri",
"VPBROADCASTDrr",
"BTR(16|32|64)rr",
"BTS(16|32|64)ri8",
"BTS(16|32|64)rr",
- "RORX(32|64)ri",
- "SAR(8|16|32|64)r1",
- "SAR(8|16|32|64)ri",
- "SARX(32|64)rr",
"SBB(16|32|64)ri",
"SBB(16|32|64)i",
- "SBB(8|16|32|64)rr",
- "SHL(8|16|32|64)r1",
- "SHL(8|16|32|64)ri",
- "SHLX(32|64)rr",
- "SHR(8|16|32|64)r1",
- "SHR(8|16|32|64)ri",
- "SHRX(32|64)rr")>;
+ "SBB(8|16|32|64)rr")>;
def BWWriteResGroup7 : SchedWriteRes<[BWPort15]> {
let Latency = 1;
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[BWWriteResGroup9], (instrs CBW, CWDE, CDQE)>;
-def: InstRW<[BWWriteResGroup9], (instregex "CLC",
- "CMC",
- "LAHF", // TODO: This doesnt match Agner's data
+def: InstRW<[BWWriteResGroup9], (instregex "LAHF", // TODO: This doesnt match Agner's data
"NOOP",
"SAHF", // TODO: This doesn't match Agner's data
"SGDT64m",
"SIDT64m",
"SLDT64m",
"SMSW16m",
- "STC",
"STRm",
"SYSCALL",
- "XCHG(16|32|64)rr")>;
+ "XCHG(16|32|64)rr")>; // FIXME: This isn't 1 uop, probably should match XCHG8rr.
def BWWriteResGroup10 : SchedWriteRes<[BWPort4,BWPort237]> {
let Latency = 1;
let NumMicroOps = 1;
let ResourceCycles = [1];
}
-def: InstRW<[BWWriteResGroup27], (instrs IMUL16rr, IMUL32rr, IMUL32rri, IMUL32rri8, IMUL64rr, IMUL64rri32, IMUL64rri8)>;
-def: InstRW<[BWWriteResGroup27], (instrs IMUL8r, MUL8r)>;
def: InstRW<[BWWriteResGroup27], (instregex "ADD_FPrST0",
"ADD_FST0r",
"ADD_FrST0",
"SUB_FPrST0",
"SUB_FST0r",
"SUB_FrST0",
- "(V?)ADDPD(Y?)rr",
- "(V?)ADDPS(Y?)rr",
- "(V?)ADDSDrr",
- "(V?)ADDSSrr",
- "(V?)ADDSUBPD(Y?)rr",
- "(V?)ADDSUBPS(Y?)rr",
"(V?)CVTDQ2PS(Y?)rr",
"(V?)CVTPS2DQ(Y?)rr",
- "(V?)CVTTPS2DQ(Y?)rr",
- "(V?)SUBPD(Y?)rr",
- "(V?)SUBPS(Y?)rr",
- "(V?)SUBSDrr",
- "(V?)SUBSSrr")>;
+ "(V?)CVTTPS2DQ(Y?)rr")>;
def BWWriteResGroup27_16 : SchedWriteRes<[BWPort1, BWPort0156]> {
- let Latency = 3;
+ let Latency = 3; // FIXME: I think this should be 4.
let NumMicroOps = 2;
let ResourceCycles = [1,1];
}
let NumMicroOps = 2;
let ResourceCycles = [1,1];
}
-def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8",
- "RORX(32|64)mi",
- "SARX(32|64)rm",
- "SHLX(32|64)rm",
- "SHRX(32|64)rm")>;
+def: InstRW<[BWWriteResGroup63], (instregex "BT(16|32|64)mi8")>;
def: InstRW<[BWWriteResGroup63, ReadAfterLd], (instrs ADC8rm, ADC16rm, ADC32rm, ADC64rm,
ADCX32rm, ADCX64rm,
ADOX32rm, ADOX64rm,
let NumMicroOps = 2;
let ResourceCycles = [1,1];
}
-def: InstRW<[BWWriteResGroup91], (instrs IMUL32rm, IMUL32rmi, IMUL32rmi8, IMUL64rm, IMUL64rmi8, IMUL64rmi32)>;
def: InstRW<[BWWriteResGroup91], (instrs IMUL8m, MUL8m)>;
def: InstRW<[BWWriteResGroup91], (instregex "MMX_CVTPI2PSirm",
"MMX_CVTPS2PIirm",
"(V?)SUBSSrm")>;
def BWWriteResGroup91_16 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
- let Latency = 8;
+ let Latency = 8; // FIXME: I think this should be 9
let NumMicroOps = 3;
let ResourceCycles = [1,1,1];
}
-def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>;
+def: InstRW<[BWWriteResGroup91_16], (instrs IMUL16rm, IMUL16rmi, IMUL16rmi8)>; // TODO: Is IMUL16rm really 3 uops?
def BWWriteResGroup91_16_2 : SchedWriteRes<[BWPort1, BWPort0156, BWPort23]> {
let Latency = 8;