let Latency = 2;
let ResourceCycles = [1, 2];
}
-def : InstRW<[ZnWritePEXTRr], (instregex "PEXTR(B|W|D|Q)rr", "MMX_PEXTRWrr")>;
+def : InstRW<[ZnWritePEXTRr], (instregex "(V?)PEXTR(B|W|D|Q)rr", "MMX_PEXTRWrr")>;
def ZnWritePEXTRm : SchedWriteRes<[ZnAGU, ZnFPU12, ZnFPU2]> {
let Latency = 5;
let ResourceCycles = [1, 2, 3];
}
// m8,x,i.
-def : InstRW<[ZnWritePEXTRm], (instregex "PEXTR(B|W|D|Q)mr")>;
+def : InstRW<[ZnWritePEXTRm], (instregex "(V?)PEXTR(B|W|D|Q)mr")>;
// VPBROADCAST B/W.
// x, m8/16.
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: vmovhpd {{.*#+}} xmm1 = xmm1[0],mem[0] sched: [8:0.50]
; ZNVER1-NEXT: vaddps %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
-; ZNVER1-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [5:3.00]
; ZNVER1-NEXT: retq # sched: [1:0.50]
%1 = bitcast x86_mmx* %a2 to <2 x float>*
%2 = load <2 x float>, <2 x float> *%1, align 8
;
; ZNVER1-LABEL: test_pextrb:
; ZNVER1: # %bb.0:
-; ZNVER1-NEXT: vpextrb $3, %xmm0, %eax # sched: [1:0.25]
-; ZNVER1-NEXT: vpextrb $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT: vpextrb $3, %xmm0, %eax # sched: [2:2.00]
+; ZNVER1-NEXT: vpextrb $1, %xmm0, (%rdi) # sched: [5:3.00]
; ZNVER1-NEXT: retq # sched: [1:0.50]
%1 = extractelement <16 x i8> %a0, i32 3
%2 = extractelement <16 x i8> %a0, i32 1
; ZNVER1-LABEL: test_pextrd:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: vpaddd %xmm0, %xmm0, %xmm0 # sched: [1:0.25]
-; ZNVER1-NEXT: vpextrd $3, %xmm0, %eax # sched: [1:0.25]
-; ZNVER1-NEXT: vpextrd $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT: vpextrd $3, %xmm0, %eax # sched: [2:2.00]
+; ZNVER1-NEXT: vpextrd $1, %xmm0, (%rdi) # sched: [5:3.00]
; ZNVER1-NEXT: retq # sched: [1:0.50]
%1 = add <4 x i32> %a0, %a0
%2 = extractelement <4 x i32> %1, i32 3
;
; ZNVER1-LABEL: test_pextrq:
; ZNVER1: # %bb.0:
-; ZNVER1-NEXT: vpextrq $1, %xmm0, %rax # sched: [1:0.25]
-; ZNVER1-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT: vpextrq $1, %xmm0, %rax # sched: [2:2.00]
+; ZNVER1-NEXT: vpextrq $1, %xmm0, (%rdi) # sched: [5:3.00]
; ZNVER1-NEXT: retq # sched: [1:0.50]
%1 = extractelement <2 x i64> %a0, i32 1
%2 = extractelement <2 x i64> %a0, i32 1
;
; ZNVER1-LABEL: test_pextrw:
; ZNVER1: # %bb.0:
-; ZNVER1-NEXT: vpextrw $3, %xmm0, %eax # sched: [1:0.25]
-; ZNVER1-NEXT: vpextrw $1, %xmm0, (%rdi) # sched: [8:1.00]
+; ZNVER1-NEXT: vpextrw $3, %xmm0, %eax # sched: [2:2.00]
+; ZNVER1-NEXT: vpextrw $1, %xmm0, (%rdi) # sched: [5:3.00]
; ZNVER1-NEXT: retq # sched: [1:0.50]
%1 = extractelement <8 x i16> %a0, i32 3
%2 = extractelement <8 x i16> %a0, i32 1