// BMI1 BEXTR, BMI2 BZHI
defm : ZnWriteResPair<WriteBEXTR, [ZnALU], 1>;
+defm : ZnWriteResPair<WriteBLS, [ZnALU], 2, [1], 2, 4, 1>;
defm : ZnWriteResPair<WriteBZHI, [ZnALU], 1>;
// IDIV
def : SchedAlias<WriteBitTestSetImmRMW, ZnWriteBTRSCm>;
def : SchedAlias<WriteBitTestSetRegRMW, ZnWriteBTRSCm>;
-// BLSI BLSMSK BLSR.
-// r,r.
-def : SchedAlias<WriteBLS, ZnWriteALULat2>;
-// r,m.
-def : SchedAlias<WriteBLSLd, ZnWriteALULat2Ld>;
-
// PDEP PEXT.
// r,r,r.
def : InstRW<[WriteMicrocoded], (instregex "PDEP(32|64)rr", "PEXT(32|64)rr")>;
// BMI1 BEXTR, BMI2 BZHI
defm : Zn2WriteResPair<WriteBEXTR, [Zn2ALU], 1>;
+defm : Zn2WriteResPair<WriteBLS, [Zn2ALU], 2, [1], 2, 4, 1>;
defm : Zn2WriteResPair<WriteBZHI, [Zn2ALU], 1>;
// IDIV
def : SchedAlias<WriteBitTestSetImmRMW, Zn2WriteBTRSCm>;
def : SchedAlias<WriteBitTestSetRegRMW, Zn2WriteBTRSCm>;
-// BLSI BLSMSK BLSR.
-// r,r.
-def : SchedAlias<WriteBLS, Zn2WriteALULat2>;
-// r,m.
-def : SchedAlias<WriteBLSLd, Zn2WriteALULat2Ld>;
-
// PDEP PEXT.
// r,r,r.
def : InstRW<[WriteMicrocoded], (instregex "PDEP(32|64)rr", "PEXT(32|64)rr")>;
# CHECK-NEXT: 2 5 0.50 * bextrl %eax, (%rbx), %ecx
# CHECK-NEXT: 1 1 0.25 bextrq %rax, %rbx, %rcx
# CHECK-NEXT: 2 5 0.50 * bextrq %rax, (%rbx), %rcx
-# CHECK-NEXT: 1 2 0.25 blsil %eax, %ecx
-# CHECK-NEXT: 1 6 0.50 * blsil (%rax), %ecx
-# CHECK-NEXT: 1 2 0.25 blsiq %rax, %rcx
-# CHECK-NEXT: 1 6 0.50 * blsiq (%rax), %rcx
-# CHECK-NEXT: 1 2 0.25 blsmskl %eax, %ecx
-# CHECK-NEXT: 1 6 0.50 * blsmskl (%rax), %ecx
-# CHECK-NEXT: 1 2 0.25 blsmskq %rax, %rcx
-# CHECK-NEXT: 1 6 0.50 * blsmskq (%rax), %rcx
-# CHECK-NEXT: 1 2 0.25 blsrl %eax, %ecx
-# CHECK-NEXT: 1 6 0.50 * blsrl (%rax), %ecx
-# CHECK-NEXT: 1 2 0.25 blsrq %rax, %rcx
-# CHECK-NEXT: 1 6 0.50 * blsrq (%rax), %rcx
+# CHECK-NEXT: 2 2 0.25 blsil %eax, %ecx
+# CHECK-NEXT: 3 6 0.50 * blsil (%rax), %ecx
+# CHECK-NEXT: 2 2 0.25 blsiq %rax, %rcx
+# CHECK-NEXT: 3 6 0.50 * blsiq (%rax), %rcx
+# CHECK-NEXT: 2 2 0.25 blsmskl %eax, %ecx
+# CHECK-NEXT: 3 6 0.50 * blsmskl (%rax), %ecx
+# CHECK-NEXT: 2 2 0.25 blsmskq %rax, %rcx
+# CHECK-NEXT: 3 6 0.50 * blsmskq (%rax), %rcx
+# CHECK-NEXT: 2 2 0.25 blsrl %eax, %ecx
+# CHECK-NEXT: 3 6 0.50 * blsrl (%rax), %ecx
+# CHECK-NEXT: 2 2 0.25 blsrq %rax, %rcx
+# CHECK-NEXT: 3 6 0.50 * blsrq (%rax), %rcx
# CHECK-NEXT: 1 2 0.25 tzcntw %ax, %cx
# CHECK-NEXT: 2 6 0.50 * tzcntw (%rax), %cx
# CHECK-NEXT: 1 2 0.25 tzcntl %eax, %ecx
# CHECK-NEXT: 2 5 0.33 * bextrl %eax, (%rbx), %ecx
# CHECK-NEXT: 1 1 0.25 bextrq %rax, %rbx, %rcx
# CHECK-NEXT: 2 5 0.33 * bextrq %rax, (%rbx), %rcx
-# CHECK-NEXT: 1 2 0.25 blsil %eax, %ecx
-# CHECK-NEXT: 1 6 0.33 * blsil (%rax), %ecx
-# CHECK-NEXT: 1 2 0.25 blsiq %rax, %rcx
-# CHECK-NEXT: 1 6 0.33 * blsiq (%rax), %rcx
-# CHECK-NEXT: 1 2 0.25 blsmskl %eax, %ecx
-# CHECK-NEXT: 1 6 0.33 * blsmskl (%rax), %ecx
-# CHECK-NEXT: 1 2 0.25 blsmskq %rax, %rcx
-# CHECK-NEXT: 1 6 0.33 * blsmskq (%rax), %rcx
-# CHECK-NEXT: 1 2 0.25 blsrl %eax, %ecx
-# CHECK-NEXT: 1 6 0.33 * blsrl (%rax), %ecx
-# CHECK-NEXT: 1 2 0.25 blsrq %rax, %rcx
-# CHECK-NEXT: 1 6 0.33 * blsrq (%rax), %rcx
+# CHECK-NEXT: 2 2 0.25 blsil %eax, %ecx
+# CHECK-NEXT: 3 6 0.33 * blsil (%rax), %ecx
+# CHECK-NEXT: 2 2 0.25 blsiq %rax, %rcx
+# CHECK-NEXT: 3 6 0.33 * blsiq (%rax), %rcx
+# CHECK-NEXT: 2 2 0.25 blsmskl %eax, %ecx
+# CHECK-NEXT: 3 6 0.33 * blsmskl (%rax), %ecx
+# CHECK-NEXT: 2 2 0.25 blsmskq %rax, %rcx
+# CHECK-NEXT: 3 6 0.33 * blsmskq (%rax), %rcx
+# CHECK-NEXT: 2 2 0.25 blsrl %eax, %ecx
+# CHECK-NEXT: 3 6 0.33 * blsrl (%rax), %ecx
+# CHECK-NEXT: 2 2 0.25 blsrq %rax, %rcx
+# CHECK-NEXT: 3 6 0.33 * blsrq (%rax), %rcx
# CHECK-NEXT: 1 2 0.25 tzcntw %ax, %cx
# CHECK-NEXT: 2 6 0.33 * tzcntw (%rax), %cx
# CHECK-NEXT: 1 2 0.25 tzcntl %eax, %ecx