;; along with GCC; see the file COPYING3. If not see
;; <http://www.gnu.org/licenses/>.
;;
-;; AMD bdver3 Scheduling
+;; AMD bdver3 and bdver4 Scheduling
;;
-;; The bdver3 contains three pipelined FP units and two integer units.
-;; Fetching and decoding logic is different from previous fam15 processors.
-;; Fetching is done every two cycles rather than every cycle and
-;; two decode units are available. The decode units therefore decode
+;; The bdver3 and bdver4 contains three pipelined FP units and two integer
+;; units. ;; Fetching and decoding logic is different from previous fam15
+;; processors. Fetching is done every two cycles rather than every cycle
+;; and two decode units are available. The decode units therefore decode
;; four instructions in two cycles.
;;
;; The load/store queue unit is not attached to the schedulers but
;; communicates with all the execution units separately instead.
;;
-;; bdver3 belong to fam15 processors. We use the same insn attribute
-;; that was used for bdver1 decoding scheme.
+;; bdver3 and bdver4 belong to fam15 processors. We use the same insn
+;; attribute that was used for bdver1 decoding scheme.
(define_automaton "bdver3,bdver3_ieu,bdver3_load,bdver3_fp,bdver3_agu")
;; Jump instructions are executed in the branch unit completely transparent to us.
(define_insn_reservation "bdver3_call" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "call,callv"))
"bdver3-double,(bdver3-agu | bdver3-ieu),nothing")
;; PUSH mem is double path.
(define_insn_reservation "bdver3_push" 1
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "push"))
"bdver3-direct,bdver3-ieu,bdver3-store")
;; POP r16/mem are double path.
(define_insn_reservation "bdver3_pop" 1
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "pop"))
"bdver3-direct,bdver3-ivector")
;; LEAVE no latency info so far, assume same with amdfam10.
(define_insn_reservation "bdver3_leave" 3
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "leave"))
"bdver3-vector,bdver3-ivector")
;; LEA executes in AGU unit with 1 cycle latency on BDVER3.
(define_insn_reservation "bdver3_lea" 1
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "lea"))
"bdver3-direct,bdver3-ieu")
;; MUL executes in special multiplier unit attached to IEU1.
(define_insn_reservation "bdver3_imul_DI" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "imul")
(and (eq_attr "mode" "DI")
(eq_attr "memory" "none,unknown"))))
"bdver3-direct,bdver3-ieu1")
(define_insn_reservation "bdver3_imul" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "imul")
(eq_attr "memory" "none,unknown")))
"bdver3-direct,bdver3-ieu1")
(define_insn_reservation "bdver3_imul_mem_DI" 10
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "imul")
(and (eq_attr "mode" "DI")
(eq_attr "memory" "load,both"))))
"bdver3-direct,bdver3-load,bdver3-ieu1")
(define_insn_reservation "bdver3_imul_mem" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "imul")
(eq_attr "memory" "load,both")))
"bdver3-direct,bdver3-load,bdver3-ieu1")
(define_insn_reservation "bdver3_str" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "str")
(eq_attr "memory" "load,both,store")))
"bdver3-vector,bdver3-load,bdver3-ivector")
;; Integer instructions.
(define_insn_reservation "bdver3_idirect" 1
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "bdver1_decode" "direct")
(and (eq_attr "unit" "integer,unknown")
(eq_attr "memory" "none,unknown"))))
"bdver3-direct,(bdver3-ieu|bdver3-agu)")
(define_insn_reservation "bdver3_ivector" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "bdver1_decode" "vector")
(and (eq_attr "unit" "integer,unknown")
(eq_attr "memory" "none,unknown"))))
"bdver3-vector,bdver3-ivector")
(define_insn_reservation "bdver3_idirect_loadmov" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "imov")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-load")
(define_insn_reservation "bdver3_idirect_load" 5
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "bdver1_decode" "direct")
(and (eq_attr "unit" "integer,unknown")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-load,bdver3-ieu")
(define_insn_reservation "bdver3_idirect_movstore" 5
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "imov")
(eq_attr "memory" "store")))
"bdver3-direct,bdver3-ieu,bdver3-store")
(define_insn_reservation "bdver3_idirect_both" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "bdver1_decode" "direct")
(and (eq_attr "unit" "integer,unknown")
(eq_attr "memory" "both"))))
bdver3-ieu,bdver3-store,
bdver3-store")
(define_insn_reservation "bdver3_idirect_store" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "bdver1_decode" "direct")
(and (eq_attr "unit" "integer,unknown")
(eq_attr "memory" "store"))))
bdver3-store")
;; BDVER3 floating point units.
(define_insn_reservation "bdver3_fldxf" 13
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fmov")
(and (eq_attr "memory" "load")
(eq_attr "mode" "XF"))))
"bdver3-vector,bdver3-fpload2,bdver3-fvector*9")
(define_insn_reservation "bdver3_fld" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fmov")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_fstxf" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fmov")
(and (eq_attr "memory" "store,both")
(eq_attr "mode" "XF"))))
"bdver3-vector,(bdver3-fpsched+bdver3-agu),(bdver3-store2+(bdver3-fvector*6))")
(define_insn_reservation "bdver3_fst" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fmov")
(eq_attr "memory" "store,both")))
"bdver3-double,(bdver3-fpsched),(bdver3-fsto+bdver3-store)")
(define_insn_reservation "bdver3_fist" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fistp,fisttp"))
"bdver3-double,(bdver3-fpsched),(bdver3-fsto+bdver3-store)")
(define_insn_reservation "bdver3_fmov_bdver3" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fmov"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_fadd_load" 10
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fop")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_fadd" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fop"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_fmul_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fmul")
(eq_attr "memory" "load")))
"bdver3-double,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_fmul" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fmul"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_fsgn" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fsgn"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_fdiv_load" 42
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fdiv")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_fdiv" 42
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fdiv"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_fpspc_load" 143
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fpspc")
(eq_attr "memory" "load")))
"bdver3-vector,bdver3-fpload,bdver3-fvector")
(define_insn_reservation "bdver3_fcmov_load" 17
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fcmov")
(eq_attr "memory" "load")))
"bdver3-vector,bdver3-fpload,bdver3-fvector")
(define_insn_reservation "bdver3_fcmov" 15
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fcmov"))
"bdver3-vector,bdver3-fpsched,bdver3-fvector")
(define_insn_reservation "bdver3_fcomi_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fcmp")
(and (eq_attr "bdver1_decode" "double")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,(bdver3-ffma | bdver3-fsto)")
(define_insn_reservation "bdver3_fcomi" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "bdver1_decode" "double")
(eq_attr "type" "fcmp")))
"bdver3-double,bdver3-fpsched,(bdver3-ffma | bdver3-fsto)")
(define_insn_reservation "bdver3_fcom_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "fcmp")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_fcom" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fcmp"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_fxch" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "fxch"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
;; SSE loads.
(define_insn_reservation "bdver3_ssevector_avx128_unaligned_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "prefix" "vex")
(and (eq_attr "movu" "1")
(eq_attr "memory" "load"))))))
"bdver3-direct,bdver3-fpload")
(define_insn_reservation "bdver3_ssevector_avx256_unaligned_load" 5
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "movu" "1")
(and (eq_attr "mode" "V8SF,V4DF")
(eq_attr "memory" "load")))))
"bdver3-double,bdver3-fpload")
(define_insn_reservation "bdver3_ssevector_sse128_unaligned_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "movu" "1")
(and (eq_attr "mode" "V4SF,V2DF")
(eq_attr "memory" "load")))))
"bdver3-direct,bdver3-fpload,bdver3-fmal")
(define_insn_reservation "bdver3_ssevector_avx128_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "prefix" "vex")
(and (eq_attr "mode" "V4SF,V2DF,TI")
(eq_attr "memory" "load")))))
"bdver3-direct,bdver3-fpload,bdver3-fmal")
(define_insn_reservation "bdver3_ssevector_avx256_load" 5
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,bdver3-fmal")
(define_insn_reservation "bdver3_ssevector_sse128_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "V4SF,V2DF,TI")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload")
(define_insn_reservation "bdver3_ssescalar_movq_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "DI")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload,bdver3-fmal")
(define_insn_reservation "bdver3_ssescalar_vmovss_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "prefix" "vex")
(and (eq_attr "mode" "SF")
(eq_attr "memory" "load")))))
"bdver3-direct,bdver3-fpload")
(define_insn_reservation "bdver3_ssescalar_sse128_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "SF,DF")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload, bdver3-ffma")
(define_insn_reservation "bdver3_mmxsse_load" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "mmxmov,ssemov")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload, bdver3-fmal")
;; SSE stores.
(define_insn_reservation "bdver3_sse_store_avx256" 5
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(eq_attr "memory" "store,both"))))
"bdver3-double,bdver3-fpsched,((bdver3-fsto+bdver3-store)*2)")
(define_insn_reservation "bdver3_sse_store" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "V4SF,V2DF,TI")
(eq_attr "memory" "store,both"))))
"bdver3-direct,bdver3-fpsched,((bdver3-fsto+bdver3-store)*2)")
(define_insn_reservation "bdver3_mmxsse_store_short" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "mmxmov,ssemov")
(eq_attr "memory" "store,both")))
"bdver3-direct,bdver3-fpsched,(bdver3-fsto+bdver3-store)")
;; Register moves.
(define_insn_reservation "bdver3_ssevector_avx256" 3
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "V8SF,V4DF,OI")
(eq_attr "memory" "none"))))
"bdver3-double,bdver3-fpsched,bdver3-fmal")
(define_insn_reservation "bdver3_movss_movsd" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemov")
(and (eq_attr "mode" "SF,DF")
(eq_attr "memory" "none"))))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_mmxssemov" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "mmxmov,ssemov")
(eq_attr "memory" "none")))
"bdver3-direct,bdver3-fpsched,bdver3-fmal")
;; SSE logs.
(define_insn_reservation "bdver3_sselog_load_256" 7
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sselog,sselog1")
(and (eq_attr "mode" "V8SF")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,bdver3-fmal")
(define_insn_reservation "bdver3_sselog_256" 3
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sselog,sselog1")
(eq_attr "mode" "V8SF")))
"bdver3-double,bdver3-fpsched,bdver3-fmal")
(define_insn_reservation "bdver3_sselog_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sselog,sselog1")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-fxbar")
(define_insn_reservation "bdver3_sselog" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "sselog,sselog1"))
"bdver3-direct,bdver3-fpsched,bdver3-fxbar")
;; SSE Shuffles
(define_insn_reservation "bdver3_sseshuf_load_256" 7
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseshuf,sseshuf1")
(and (eq_attr "mode" "V8SF")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,bdver3-fpshuf")
(define_insn_reservation "bdver3_sseshuf_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseshuf,sseshuf1")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-fpshuf")
(define_insn_reservation "bdver3_sseshuf_256" 3
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseshuf")
(eq_attr "mode" "V8SF")))
"bdver3-double,bdver3-fpsched,bdver3-fpshuf")
(define_insn_reservation "bdver3_sseshuf" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "sseshuf,sseshuf1"))
"bdver3-direct,bdver3-fpsched,bdver3-fpshuf")
;; PCMP actually executes in FMAL.
(define_insn_reservation "bdver3_ssecmp_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecmp")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_ssecmp" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "ssecmp"))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_ssecomi_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecomi")
(eq_attr "memory" "load")))
"bdver3-double,bdver3-fpload,(bdver3-ffma | bdver3-fsto)")
(define_insn_reservation "bdver3_ssecomi" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(eq_attr "type" "ssecomi"))
"bdver3-double,bdver3-fpsched,(bdver3-ffma | bdver3-fsto)")
;; 256 bit conversion.
(define_insn_reservation "bdver3_vcvtX2Y_avx256_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(ior (ior (match_operand:V4DF 0 "register_operand")
(match_operand:V8SI 1 "nonimmediate_operand")))))))
"bdver3-vector,bdver3-fpload,bdver3-fvector")
(define_insn_reservation "bdver3_vcvtX2Y_avx256" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(ior (ior (match_operand:V4DF 0 "register_operand")
"bdver3-vector,bdver3-fpsched,bdver3-fvector")
;; CVTSS2SD, CVTSD2SS.
(define_insn_reservation "bdver3_ssecvt_cvtss2sd_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "mode" "SF,DF")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload,bdver3-fcvt")
(define_insn_reservation "bdver3_ssecvt_cvtss2sd" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "mode" "SF,DF")
(eq_attr "memory" "none"))))
"bdver3-direct,bdver3-fpsched,bdver3-fcvt")
;; CVTSI2SD, CVTSI2SS, CVTSI2SDQ, CVTSI2SSQ.
(define_insn_reservation "bdver3_sseicvt_cvtsi2sd_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseicvt")
(and (eq_attr "mode" "SF,DF")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload,bdver3-fcvt")
(define_insn_reservation "bdver3_sseicvt_cvtsi2sd" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseicvt")
(and (eq_attr "mode" "SF,DF")
(eq_attr "memory" "none"))))
"bdver3-double,bdver3-fpsched,(nothing | bdver3-fcvt)")
;; CVTPD2PS.
(define_insn_reservation "bdver3_ssecvt_cvtpd2ps_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V4SF 0 "register_operand")
(match_operand:V2DF 1 "nonimmediate_operand")))))
"bdver3-double,bdver3-fpload,(bdver3-fxbar | bdver3-fcvt)")
(define_insn_reservation "bdver3_ssecvt_cvtpd2ps" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(and (match_operand:V4SF 0 "register_operand")
"bdver3-double,bdver3-fpsched,(bdver3-fxbar | bdver3-fcvt)")
;; CVTPI2PS, CVTDQ2PS.
(define_insn_reservation "bdver3_ssecvt_cvtdq2ps_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V4SF 0 "register_operand")
(match_operand:V4SI 1 "nonimmediate_operand"))))))
"bdver3-direct,bdver3-fpload,bdver3-fcvt")
(define_insn_reservation "bdver3_ssecvt_cvtdq2ps" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(and (match_operand:V4SF 0 "register_operand")
"bdver3-direct,bdver3-fpsched,bdver3-fcvt")
;; CVTDQ2PD.
(define_insn_reservation "bdver3_ssecvt_cvtdq2pd_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V2DF 0 "register_operand")
(match_operand:V4SI 1 "nonimmediate_operand")))))
"bdver3-double,bdver3-fpload,(bdver3-fxbar | bdver3-fcvt)")
(define_insn_reservation "bdver3_ssecvt_cvtdq2pd" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(and (match_operand:V2DF 0 "register_operand")
"bdver3-double,bdver3-fpsched,(bdver3-fxbar | bdver3-fcvt)")
;; CVTPS2PD, CVTPI2PD.
(define_insn_reservation "bdver3_ssecvt_cvtps2pd_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V2DF 0 "register_operand")
(match_operand:V4SF 1 "nonimmediate_operand"))))))
"bdver3-double,bdver3-fpload,(bdver3-fxbar | bdver3-fcvt)")
(define_insn_reservation "bdver3_ssecvt_cvtps2pd" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V2DF 0 "register_operand")
"bdver3-double,bdver3-fpsched,(bdver3-fxbar | bdver3-fcvt)")
;; CVTSD2SI, CVTSD2SIQ, CVTSS2SI, CVTSS2SIQ, CVTTSD2SI, CVTTSD2SIQ, CVTTSS2SI, CVTTSS2SIQ.
(define_insn_reservation "bdver3_ssecvt_cvtsX2si_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseicvt")
(and (eq_attr "mode" "SI,DI")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,(bdver3-fcvt | bdver3-fsto)")
(define_insn_reservation "bdver3_ssecvt_cvtsX2si" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseicvt")
(and (eq_attr "mode" "SI,DI")
(eq_attr "memory" "none"))))
"bdver3-double,bdver3-fpsched,(bdver3-fcvt | bdver3-fsto)")
;; CVTPD2PI, CVTTPD2PI.
(define_insn_reservation "bdver3_ssecvt_cvtpd2pi_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V2DF 1 "nonimmediate_operand")
(match_operand:V2SI 0 "register_operand")))))
"bdver3-double,bdver3-fpload,(bdver3-fcvt | bdver3-fxbar)")
(define_insn_reservation "bdver3_ssecvt_cvtpd2pi" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(and (match_operand:V2DF 1 "nonimmediate_operand")
"bdver3-double,bdver3-fpsched,(bdver3-fcvt | bdver3-fxbar)")
;; CVTPD2DQ, CVTTPD2DQ.
(define_insn_reservation "bdver3_ssecvt_cvtpd2dq_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V2DF 1 "nonimmediate_operand")
(match_operand:V4SI 0 "register_operand")))))
"bdver3-double,bdver3-fpload,(bdver3-fcvt | bdver3-fxbar)")
(define_insn_reservation "bdver3_ssecvt_cvtpd2dq" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(and (match_operand:V2DF 1 "nonimmediate_operand")
"bdver3-double,bdver3-fpsched,(bdver3-fcvt | bdver3-fxbar)")
;; CVTPS2PI, CVTTPS2PI, CVTPS2DQ, CVTTPS2DQ.
(define_insn_reservation "bdver3_ssecvt_cvtps2pi_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "load")
(and (match_operand:V4SF 1 "nonimmediate_operand")
(match_operand: V4SI 0 "register_operand"))))))
"bdver3-direct,bdver3-fpload,bdver3-fcvt")
(define_insn_reservation "bdver3_ssecvt_cvtps2pi" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssecvt")
(and (eq_attr "memory" "none")
(and (match_operand:V4SF 1 "nonimmediate_operand")
;; SSE MUL, ADD, and MULADD.
(define_insn_reservation "bdver3_ssemuladd_load_256" 11
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemul,sseadd,sseadd1,ssemuladd")
(and (eq_attr "mode" "V8SF,V4DF")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_ssemuladd_256" 7
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemul,sseadd,sseadd1,ssemuladd")
(and (eq_attr "mode" "V8SF,V4DF")
(eq_attr "memory" "none"))))
"bdver3-double,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_ssemuladd_load" 10
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemul,sseadd,sseadd1,ssemuladd")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-ffma")
(define_insn_reservation "bdver3_ssemuladd" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssemul,sseadd,sseadd1,ssemuladd")
(eq_attr "memory" "none")))
"bdver3-direct,bdver3-fpsched,bdver3-ffma")
(define_insn_reservation "bdver3_sseimul_load" 8
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseimul")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-fmma")
(define_insn_reservation "bdver3_sseimul" 4
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseimul")
(eq_attr "memory" "none")))
"bdver3-direct,bdver3-fpsched,bdver3-fmma")
(define_insn_reservation "bdver3_sseiadd_load" 6
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseiadd")
(eq_attr "memory" "load")))
"bdver3-direct,bdver3-fpload,bdver3-fmal")
(define_insn_reservation "bdver3_sseiadd" 2
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseiadd")
(eq_attr "memory" "none")))
"bdver3-direct,bdver3-fpsched,bdver3-fmal")
;; SSE DIV: no throughput information (assume same as amdfam10).
(define_insn_reservation "bdver3_ssediv_double_load_256" 27
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "V4DF")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_double_256" 27
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "V4DF")
(eq_attr "memory" "none"))))
"bdver3-double,bdver3-fpsched,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_single_load_256" 27
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "V8SF")
(eq_attr "memory" "load"))))
"bdver3-double,bdver3-fpload,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_single_256" 24
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "V8SF")
(eq_attr "memory" "none"))))
"bdver3-double,bdver3-fpsched,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_double_load" 27
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "DF,V2DF")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_double" 27
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "DF,V2DF")
(eq_attr "memory" "none"))))
"bdver3-direct,bdver3-fpsched,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_single_load" 27
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "SF,V4SF")
(eq_attr "memory" "load"))))
"bdver3-direct,bdver3-fpload,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_ssediv_single" 24
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "ssediv")
(and (eq_attr "mode" "SF,V4SF")
(eq_attr "memory" "none"))))
"bdver3-direct,bdver3-fpsched,(bdver3-ffma0*17 | bdver3-ffma1*17)")
(define_insn_reservation "bdver3_sseins" 3
- (and (eq_attr "cpu" "bdver3")
+ (and (eq_attr "cpu" "bdver3,bdver4")
(and (eq_attr "type" "sseins")
(eq_attr "mode" "TI")))
"bdver3-direct,bdver3-fpsched,bdver3-fxbar")
1, /* cond_not_taken_branch_cost. */
};
+/* BDVER4 has optimized REP instruction for medium sized blocks, but for
+ very small blocks it is better to use loop. For large blocks, libcall
+ can do nontemporary accesses and beat inline considerably. */
+static stringop_algs bdver4_memcpy[2] = {
+ {libcall, {{6, loop, false}, {14, unrolled_loop, false},
+ {-1, rep_prefix_4_byte, false}}},
+ {libcall, {{16, loop, false}, {8192, rep_prefix_8_byte, false},
+ {-1, libcall, false}}}};
+static stringop_algs bdver4_memset[2] = {
+ {libcall, {{8, loop, false}, {24, unrolled_loop, false},
+ {2048, rep_prefix_4_byte, false}, {-1, libcall, false}}},
+ {libcall, {{48, unrolled_loop, false}, {8192, rep_prefix_8_byte, false},
+ {-1, libcall, false}}}};
+struct processor_costs bdver4_cost = {
+ COSTS_N_INSNS (1), /* cost of an add instruction */
+ COSTS_N_INSNS (1), /* cost of a lea instruction */
+ COSTS_N_INSNS (1), /* variable shift costs */
+ COSTS_N_INSNS (1), /* constant shift costs */
+ {COSTS_N_INSNS (4), /* cost of starting multiply for QI */
+ COSTS_N_INSNS (4), /* HI */
+ COSTS_N_INSNS (4), /* SI */
+ COSTS_N_INSNS (6), /* DI */
+ COSTS_N_INSNS (6)}, /* other */
+ 0, /* cost of multiply per each bit set */
+ {COSTS_N_INSNS (19), /* cost of a divide/mod for QI */
+ COSTS_N_INSNS (35), /* HI */
+ COSTS_N_INSNS (51), /* SI */
+ COSTS_N_INSNS (83), /* DI */
+ COSTS_N_INSNS (83)}, /* other */
+ COSTS_N_INSNS (1), /* cost of movsx */
+ COSTS_N_INSNS (1), /* cost of movzx */
+ 8, /* "large" insn */
+ 9, /* MOVE_RATIO */
+ 4, /* cost for loading QImode using movzbl */
+ {5, 5, 4}, /* cost of loading integer registers
+ in QImode, HImode and SImode.
+ Relative to reg-reg move (2). */
+ {4, 4, 4}, /* cost of storing integer registers */
+ 2, /* cost of reg,reg fld/fst */
+ {5, 5, 12}, /* cost of loading fp registers
+ in SFmode, DFmode and XFmode */
+ {4, 4, 8}, /* cost of storing fp registers
+ in SFmode, DFmode and XFmode */
+ 2, /* cost of moving MMX register */
+ {4, 4}, /* cost of loading MMX registers
+ in SImode and DImode */
+ {4, 4}, /* cost of storing MMX registers
+ in SImode and DImode */
+ 2, /* cost of moving SSE register */
+ {4, 4, 4}, /* cost of loading SSE registers
+ in SImode, DImode and TImode */
+ {4, 4, 4}, /* cost of storing SSE registers
+ in SImode, DImode and TImode */
+ 2, /* MMX or SSE register to integer */
+ 16, /* size of l1 cache. */
+ 2048, /* size of l2 cache. */
+ 64, /* size of prefetch block */
+ /* New AMD processors never drop prefetches; if they cannot be performed
+ immediately, they are queued. We set number of simultaneous prefetches
+ to a large constant to reflect this (it probably is not a good idea not
+ to limit number of prefetches at all, as their execution also takes some
+ time). */
+ 100, /* number of parallel prefetches */
+ 2, /* Branch cost */
+ COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */
+ COSTS_N_INSNS (6), /* cost of FMUL instruction. */
+ COSTS_N_INSNS (42), /* cost of FDIV instruction. */
+ COSTS_N_INSNS (2), /* cost of FABS instruction. */
+ COSTS_N_INSNS (2), /* cost of FCHS instruction. */
+ COSTS_N_INSNS (52), /* cost of FSQRT instruction. */
+
+ bdver4_memcpy,
+ bdver4_memset,
+ 6, /* scalar_stmt_cost. */
+ 4, /* scalar load_cost. */
+ 4, /* scalar_store_cost. */
+ 6, /* vec_stmt_cost. */
+ 0, /* vec_to_scalar_cost. */
+ 2, /* scalar_to_vec_cost. */
+ 4, /* vec_align_load_cost. */
+ 4, /* vec_unalign_load_cost. */
+ 4, /* vec_store_cost. */
+ 2, /* cond_taken_branch_cost. */
+ 1, /* cond_not_taken_branch_cost. */
+};
+
/* BTVER1 has optimized REP instruction for medium sized blocks, but for
very small blocks it is better to use loop. For large blocks, libcall can
do nontemporary accesses and beat inline considerably. */
#define m_BDVER1 (1<<PROCESSOR_BDVER1)
#define m_BDVER2 (1<<PROCESSOR_BDVER2)
#define m_BDVER3 (1<<PROCESSOR_BDVER3)
+#define m_BDVER4 (1<<PROCESSOR_BDVER4)
#define m_BTVER1 (1<<PROCESSOR_BTVER1)
#define m_BTVER2 (1<<PROCESSOR_BTVER2)
-#define m_BDVER (m_BDVER1 | m_BDVER2 | m_BDVER3)
+#define m_BDVER (m_BDVER1 | m_BDVER2 | m_BDVER3 | m_BDVER4)
#define m_BTVER (m_BTVER1 | m_BTVER2)
#define m_AMD_MULTIPLE (m_ATHLON_K8 | m_AMDFAM10 | m_BDVER | m_BTVER)
{&bdver1_cost, 16, 10, 16, 7, 11},
{&bdver2_cost, 16, 10, 16, 7, 11},
{&bdver3_cost, 16, 10, 16, 7, 11},
+ {&bdver4_cost, 16, 10, 16, 7, 11},
{&btver1_cost, 16, 10, 16, 7, 11},
{&btver2_cost, 16, 10, 16, 7, 11},
{&atom_cost, 16, 15, 16, 7, 16},
"bdver1",
"bdver2",
"bdver3",
+ "bdver4",
"btver1",
"btver2"
};
| PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
| PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE
| PTA_XSAVEOPT | PTA_FSGSBASE},
+ {"bdver4", PROCESSOR_BDVER4, CPU_BDVER4,
+ PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+ | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
+ | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_AVX2
+ | PTA_FMA4 | PTA_XOP | PTA_LWP | PTA_BMI | PTA_BMI2
+ | PTA_TBM | PTA_F16C | PTA_FMA | PTA_PRFCHW | PTA_FXSR
+ | PTA_XSAVE | PTA_XSAVEOPT | PTA_FSGSBASE},
{"btver1", PROCESSOR_BTVER1, CPU_GENERIC,
PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
| PTA_SSSE3 | PTA_SSE4A |PTA_ABM | PTA_CX16 | PTA_PRFCHW
case PROCESSOR_BDVER1:
case PROCESSOR_BDVER2:
case PROCESSOR_BDVER3:
+ case PROCESSOR_BDVER4:
case PROCESSOR_CORE2:
case PROCESSOR_COREI7:
case PROCESSOR_COREI7_AVX:
case PROCESSOR_BDVER1:
case PROCESSOR_BDVER2:
case PROCESSOR_BDVER3:
+ case PROCESSOR_BDVER4:
case PROCESSOR_BTVER1:
case PROCESSOR_BTVER2:
case PROCESSOR_GENERIC:
case PROCESSOR_BDVER1:
case PROCESSOR_BDVER2:
case PROCESSOR_BDVER3:
+ case PROCESSOR_BDVER4:
/* We use lookahead value 4 for BD both before and after reload
schedules. Plan is to have value 8 included for O3. */
return 4;
M_AMDFAM10H_ISTANBUL,
M_AMDFAM15H_BDVER1,
M_AMDFAM15H_BDVER2,
- M_AMDFAM15H_BDVER3
+ M_AMDFAM15H_BDVER3,
+ M_AMDFAM15H_BDVER4
};
static struct _arch_names_table
{"bdver1", M_AMDFAM15H_BDVER1},
{"bdver2", M_AMDFAM15H_BDVER2},
{"bdver3", M_AMDFAM15H_BDVER3},
+ {"bdver4", M_AMDFAM15H_BDVER4},
};
static struct _isa_names_table
static bool
has_dispatch (rtx insn, int action)
{
- if ((TARGET_BDVER1 || TARGET_BDVER2 || TARGET_BDVER3)
+ if ((TARGET_BDVER1 || TARGET_BDVER2 || TARGET_BDVER3 || TARGET_BDVER4)
&& flag_dispatch_scheduler)
switch (action)
{