def: InstRW<[HWWriteResGroup0], (instrs VBROADCASTSSrm)>;
def: InstRW<[HWWriteResGroup0], (instregex "(V?)MOVSHDUPrm",
"(V?)MOVSLDUPrm",
+ "(V?)MOVDDUPrm",
"VPBROADCAST(D|Q)rm")>;
def HWWriteResGroup0_1 : SchedWriteRes<[HWPort23]> {
def: InstRW<[HWWriteResGroup0_1], (instregex "LD_F(32|64|80)m",
"VPBROADCAST(D|Q)Yrm")>;
-def HWWriteResGroup0_2 : SchedWriteRes<[HWPort23]> {
- let Latency = 5;
- let NumMicroOps = 1;
- let ResourceCycles = [1];
-}
-def: InstRW<[HWWriteResGroup0_2], (instregex "(V?)MOVDDUPrm")>;
-
def HWWriteResGroup1 : SchedWriteRes<[HWPort4,HWPort237]> {
let Latency = 1;
let NumMicroOps = 2;
}
def: InstRW<[ICXWriteResGroup57], (instregex "LAR(16|32|64)rr")>;
-def ICXWriteResGroup58 : SchedWriteRes<[ICXPort23]> {
- let Latency = 5;
- let NumMicroOps = 1;
- let ResourceCycles = [1];
-}
-def: InstRW<[ICXWriteResGroup58], (instregex "(V?)MOVDDUPrm")>; // TODO: Should this be ICXWriteResGroup71?
-
def ICXWriteResGroup61 : SchedWriteRes<[ICXPort5,ICXPort015]> {
let Latency = 5;
let NumMicroOps = 2;
VPBROADCASTQrm,
VMOVSHDUPrm,
VMOVSLDUPrm,
+ VMOVDDUPrm,
MOVSHDUPrm,
- MOVSLDUPrm)>;
+ MOVSLDUPrm,
+ MOVDDUPrm)>;
def ICXWriteResGroup72 : SchedWriteRes<[ICXPort5]> {
let Latency = 6;
# CHECK-NEXT: 1 1 1.00 vmovd %xmm0, %ecx
# CHECK-NEXT: 2 1 1.00 * vmovd %xmm0, (%rax)
# CHECK-NEXT: 1 1 1.00 vmovddup %xmm0, %xmm2
-# CHECK-NEXT: 1 5 0.50 * vmovddup (%rax), %xmm2
+# CHECK-NEXT: 1 6 0.50 * vmovddup (%rax), %xmm2
# CHECK-NEXT: 1 1 1.00 vmovddup %ymm0, %ymm2
# CHECK-NEXT: 1 7 0.50 * vmovddup (%rax), %ymm2
# CHECK-NEXT: 1 1 0.33 vmovdqa %xmm0, %xmm2
# CHECK-NEXT: 1 6 0.50 * lddqu (%rax), %xmm2
# CHECK-NEXT: 1 100 0.25 U monitor
# CHECK-NEXT: 1 1 1.00 movddup %xmm0, %xmm2
-# CHECK-NEXT: 1 5 0.50 * movddup (%rax), %xmm2
+# CHECK-NEXT: 1 6 0.50 * movddup (%rax), %xmm2
# CHECK-NEXT: 1 1 1.00 movshdup %xmm0, %xmm2
# CHECK-NEXT: 1 6 0.50 * movshdup (%rax), %xmm2
# CHECK-NEXT: 1 1 1.00 movsldup %xmm0, %xmm2
# CHECK-NEXT: 1 2 1.00 vmovd %xmm0, %ecx
# CHECK-NEXT: 2 1 1.00 * vmovd %xmm0, (%rax)
# CHECK-NEXT: 1 1 1.00 vmovddup %xmm0, %xmm2
-# CHECK-NEXT: 1 5 0.50 * vmovddup (%rax), %xmm2
+# CHECK-NEXT: 1 6 0.50 * vmovddup (%rax), %xmm2
# CHECK-NEXT: 1 1 1.00 vmovddup %ymm0, %ymm2
# CHECK-NEXT: 1 7 0.50 * vmovddup (%rax), %ymm2
# CHECK-NEXT: 1 1 0.33 vmovdqa %xmm0, %xmm2
# CHECK-NEXT: 1 6 0.50 * lddqu (%rax), %xmm2
# CHECK-NEXT: 1 100 0.25 U monitor
# CHECK-NEXT: 1 1 1.00 movddup %xmm0, %xmm2
-# CHECK-NEXT: 1 5 0.50 * movddup (%rax), %xmm2
+# CHECK-NEXT: 1 6 0.50 * movddup (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 movshdup %xmm0, %xmm2
# CHECK-NEXT: 1 6 0.50 * movshdup (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 movsldup %xmm0, %xmm2