// Vector insert/extract operations.
////////////////////////////////////////////////////////////////////////////////
-defm : JWriteResFpuPair<WriteVecInsert, [JFPU01, JVALU], 1>;
-def : WriteRes<WriteVecExtract, [JFPU0, JFPA, JALU0]> { let Latency = 3; }
-def : WriteRes<WriteVecExtractSt, [JFPU1, JSTC, JSAGU]> { let Latency = 3; }
+defm : X86WriteRes<WriteVecInsert, [JFPU01, JVALU], 7, [1,1], 2>;
+defm : X86WriteRes<WriteVecInsertLd, [JFPU01, JVALU, JLAGU], 4, [1,1,1], 1>;
+defm : X86WriteRes<WriteVecExtract, [JFPU0, JFPA, JALU0], 3, [1,1,1], 1>;
+defm : X86WriteRes<WriteVecExtractSt, [JFPU1, JSTC, JSAGU], 3, [1,1,1], 1>;
////////////////////////////////////////////////////////////////////////////////
// SSE42 String instructions.
;
; BTVER2-LABEL: test_pinsrw:
; BTVER2: # %bb.0:
+; BTVER2-NEXT: pinsrw $0, %edi, %mm0 # sched: [7:0.50]
; BTVER2-NEXT: movswl (%rsi), %eax # sched: [4:1.00]
-; BTVER2-NEXT: pinsrw $0, %edi, %mm0 # sched: [1:0.50]
-; BTVER2-NEXT: pinsrw $1, %eax, %mm0 # sched: [1:0.50]
+; BTVER2-NEXT: pinsrw $1, %eax, %mm0 # sched: [7:0.50]
; BTVER2-NEXT: movq %mm0, %rax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
;
; BTVER2-SSE-LABEL: test_pinsrw:
; BTVER2-SSE: # %bb.0:
-; BTVER2-SSE-NEXT: pinsrw $1, %edi, %xmm0 # sched: [1:0.50]
-; BTVER2-SSE-NEXT: pinsrw $3, (%rsi), %xmm0 # sched: [6:1.00]
+; BTVER2-SSE-NEXT: pinsrw $1, %edi, %xmm0 # sched: [7:0.50]
+; BTVER2-SSE-NEXT: pinsrw $3, (%rsi), %xmm0 # sched: [4:1.00]
; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
;
; BTVER2-LABEL: test_pinsrw:
; BTVER2: # %bb.0:
-; BTVER2-NEXT: vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [1:0.50]
-; BTVER2-NEXT: vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
+; BTVER2-NEXT: vpinsrw $1, %edi, %xmm0, %xmm0 # sched: [7:0.50]
+; BTVER2-NEXT: vpinsrw $3, (%rsi), %xmm0, %xmm0 # sched: [4:1.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
; ZNVER1-SSE-LABEL: test_pinsrw:
;
; BTVER2-SSE-LABEL: test_pinsrb:
; BTVER2-SSE: # %bb.0:
-; BTVER2-SSE-NEXT: pinsrb $1, %edi, %xmm0 # sched: [1:0.50]
-; BTVER2-SSE-NEXT: pinsrb $3, (%rsi), %xmm0 # sched: [6:1.00]
+; BTVER2-SSE-NEXT: pinsrb $1, %edi, %xmm0 # sched: [7:0.50]
+; BTVER2-SSE-NEXT: pinsrb $3, (%rsi), %xmm0 # sched: [4:1.00]
; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
;
; BTVER2-LABEL: test_pinsrb:
; BTVER2: # %bb.0:
-; BTVER2-NEXT: vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [1:0.50]
-; BTVER2-NEXT: vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
+; BTVER2-NEXT: vpinsrb $1, %edi, %xmm0, %xmm0 # sched: [7:0.50]
+; BTVER2-NEXT: vpinsrb $3, (%rsi), %xmm0, %xmm0 # sched: [4:1.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
; ZNVER1-SSE-LABEL: test_pinsrb:
;
; BTVER2-SSE-LABEL: test_pinsrd:
; BTVER2-SSE: # %bb.0:
-; BTVER2-SSE-NEXT: pinsrd $1, %edi, %xmm0 # sched: [1:0.50]
-; BTVER2-SSE-NEXT: pinsrd $3, (%rsi), %xmm0 # sched: [6:1.00]
+; BTVER2-SSE-NEXT: pinsrd $1, %edi, %xmm0 # sched: [7:0.50]
+; BTVER2-SSE-NEXT: pinsrd $3, (%rsi), %xmm0 # sched: [4:1.00]
; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
;
; BTVER2-LABEL: test_pinsrd:
; BTVER2: # %bb.0:
-; BTVER2-NEXT: vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [1:0.50]
-; BTVER2-NEXT: vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [6:1.00]
+; BTVER2-NEXT: vpinsrd $1, %edi, %xmm0, %xmm0 # sched: [7:0.50]
+; BTVER2-NEXT: vpinsrd $3, (%rsi), %xmm0, %xmm0 # sched: [4:1.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
; ZNVER1-SSE-LABEL: test_pinsrd:
;
; BTVER2-SSE-LABEL: test_pinsrq:
; BTVER2-SSE: # %bb.0:
-; BTVER2-SSE-NEXT: pinsrq $1, (%rsi), %xmm1 # sched: [6:1.00]
-; BTVER2-SSE-NEXT: pinsrq $1, %rdi, %xmm0 # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pinsrq $1, %rdi, %xmm0 # sched: [7:0.50]
+; BTVER2-SSE-NEXT: pinsrq $1, (%rsi), %xmm1 # sched: [4:1.00]
; BTVER2-SSE-NEXT: paddq %xmm1, %xmm0 # sched: [1:0.50]
; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
;
; BTVER2-LABEL: test_pinsrq:
; BTVER2: # %bb.0:
-; BTVER2-NEXT: vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [6:1.00]
-; BTVER2-NEXT: vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [1:0.50]
+; BTVER2-NEXT: vpinsrq $1, %rdi, %xmm0, %xmm0 # sched: [7:0.50]
+; BTVER2-NEXT: vpinsrq $1, (%rsi), %xmm1, %xmm1 # sched: [4:1.00]
; BTVER2-NEXT: vpaddq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
# CHECK-NEXT: 1 6 1.00 * vphsubsw (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 1 0.50 vphsubw %xmm0, %xmm1, %xmm2
# CHECK-NEXT: 1 6 1.00 * vphsubw (%rax), %xmm1, %xmm2
-# CHECK-NEXT: 1 1 0.50 vpinsrb $1, %eax, %xmm1, %xmm2
-# CHECK-NEXT: 1 6 1.00 * vpinsrb $1, (%rax), %xmm1, %xmm2
-# CHECK-NEXT: 1 1 0.50 vpinsrd $1, %eax, %xmm1, %xmm2
-# CHECK-NEXT: 1 6 1.00 * vpinsrd $1, (%rax), %xmm1, %xmm2
-# CHECK-NEXT: 1 1 0.50 vpinsrq $1, %rax, %xmm1, %xmm2
-# CHECK-NEXT: 1 6 1.00 * vpinsrq $1, (%rax), %xmm1, %xmm2
-# CHECK-NEXT: 1 1 0.50 vpinsrw $1, %eax, %xmm1, %xmm2
-# CHECK-NEXT: 1 6 1.00 * vpinsrw $1, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: 2 7 0.50 vpinsrb $1, %eax, %xmm1, %xmm2
+# CHECK-NEXT: 1 4 1.00 * vpinsrb $1, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: 2 7 0.50 vpinsrd $1, %eax, %xmm1, %xmm2
+# CHECK-NEXT: 1 4 1.00 * vpinsrd $1, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: 2 7 0.50 vpinsrq $1, %rax, %xmm1, %xmm2
+# CHECK-NEXT: 1 4 1.00 * vpinsrq $1, (%rax), %xmm1, %xmm2
+# CHECK-NEXT: 2 7 0.50 vpinsrw $1, %eax, %xmm1, %xmm2
+# CHECK-NEXT: 1 4 1.00 * vpinsrw $1, (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 2 1.00 vpmaddubsw %xmm0, %xmm1, %xmm2
# CHECK-NEXT: 1 7 1.00 * vpmaddubsw (%rax), %xmm1, %xmm2
# CHECK-NEXT: 1 2 1.00 vpmaddwd %xmm0, %xmm1, %xmm2
# CHECK-NEXT: 1 1 0.50 pavgw %mm0, %mm2
# CHECK-NEXT: 1 6 1.00 * pavgw (%rax), %mm2
# CHECK-NEXT: 1 3 1.00 pextrw $1, %mm0, %ecx
-# CHECK-NEXT: 1 1 0.50 pinsrw $1, %eax, %mm2
-# CHECK-NEXT: 1 6 1.00 * pinsrw $1, (%rax), %mm2
+# CHECK-NEXT: 2 7 0.50 pinsrw $1, %eax, %mm2
+# CHECK-NEXT: 1 4 1.00 * pinsrw $1, (%rax), %mm2
# CHECK-NEXT: 1 1 0.50 pmaxsw %mm0, %mm2
# CHECK-NEXT: 1 6 1.00 * pmaxsw (%rax), %mm2
# CHECK-NEXT: 1 1 0.50 pmaxub %mm0, %mm2
# CHECK-NEXT: 1 3 1.00 * pextrw $1, %xmm0, (%rax)
# CHECK-NEXT: 1 2 1.00 phminposuw %xmm0, %xmm2
# CHECK-NEXT: 1 7 1.00 * phminposuw (%rax), %xmm2
-# CHECK-NEXT: 1 1 0.50 pinsrb $1, %eax, %xmm1
-# CHECK-NEXT: 1 6 1.00 * pinsrb $1, (%rax), %xmm1
-# CHECK-NEXT: 1 1 0.50 pinsrd $1, %eax, %xmm1
-# CHECK-NEXT: 1 6 1.00 * pinsrd $1, (%rax), %xmm1
-# CHECK-NEXT: 1 1 0.50 pinsrq $1, %rax, %xmm1
-# CHECK-NEXT: 1 6 1.00 * pinsrq $1, (%rax), %xmm1
+# CHECK-NEXT: 2 7 0.50 pinsrb $1, %eax, %xmm1
+# CHECK-NEXT: 1 4 1.00 * pinsrb $1, (%rax), %xmm1
+# CHECK-NEXT: 2 7 0.50 pinsrd $1, %eax, %xmm1
+# CHECK-NEXT: 1 4 1.00 * pinsrd $1, (%rax), %xmm1
+# CHECK-NEXT: 2 7 0.50 pinsrq $1, %rax, %xmm1
+# CHECK-NEXT: 1 4 1.00 * pinsrq $1, (%rax), %xmm1
# CHECK-NEXT: 1 1 0.50 pmaxsb %xmm0, %xmm2
# CHECK-NEXT: 1 6 1.00 * pmaxsb (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 pmaxsd %xmm0, %xmm2