diff options
Diffstat (limited to 'gcc/config/rs6000/e5500.md')
-rw-r--r-- | gcc/config/rs6000/e5500.md | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/gcc/config/rs6000/e5500.md b/gcc/config/rs6000/e5500.md index b2547a03a41..8d784e0e4de 100644 --- a/gcc/config/rs6000/e5500.md +++ b/gcc/config/rs6000/e5500.md @@ -56,18 +56,27 @@ ;; SFX. (define_insn_reservation "e5500_sfx" 1 - (and (eq_attr "type" "integer,insert_word,insert_dword,delayed_compare,\ - shift,cntlz,exts") + (and (ior (eq_attr "type" "integer,insert,cntlz,exts") + (and (eq_attr "type" "add,logical") + (eq_attr "dot" "no")) + (and (eq_attr "type" "shift") + (eq_attr "var_shift" "no"))) (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_sfx") (define_insn_reservation "e5500_sfx2" 2 - (and (eq_attr "type" "cmp,compare,fast_compare,trap") + (and (ior (eq_attr "type" "cmp,compare,trap") + (and (eq_attr "type" "add,logical") + (eq_attr "dot" "yes")) + (and (eq_attr "type" "shift") + (eq_attr "dot" "yes") + (eq_attr "var_shift" "no"))) (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_sfx") (define_insn_reservation "e5500_delayed" 2 - (and (eq_attr "type" "var_shift_rotate,var_delayed_compare") + (and (eq_attr "type" "shift") + (eq_attr "var_shift" "yes") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_sfx*2") @@ -101,49 +110,54 @@ ;; CFX - Multiply. (define_insn_reservation "e5500_multiply" 4 - (and (eq_attr "type" "imul") + (and (eq_attr "type" "mul") + (eq_attr "dot" "no") + (eq_attr "size" "32") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_cfx_stage0,e5500_cfx_stage1") (define_insn_reservation "e5500_multiply_i" 5 - (and (eq_attr "type" "imul2,imul3,imul_compare") + (and (eq_attr "type" "mul") + (ior (eq_attr "dot" "yes") + (eq_attr "size" "8,16")) (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_cfx_stage0,\ e5500_cfx_stage0+e5500_cfx_stage1,e5500_cfx_stage1") ;; CFX - Divide. (define_insn_reservation "e5500_divide" 16 - (and (eq_attr "type" "idiv") + (and (eq_attr "type" "div") + (eq_attr "size" "32") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_cfx_stage0+e5500_cfx_div,\ e5500_cfx_div*15") (define_insn_reservation "e5500_divide_d" 26 - (and (eq_attr "type" "ldiv") + (and (eq_attr "type" "div") + (eq_attr "size" "64") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_cfx_stage0+e5500_cfx_div,\ e5500_cfx_div*25") ;; LSU - Loads. (define_insn_reservation "e5500_load" 3 - (and (eq_attr "type" "load,load_ext,load_ext_u,load_ext_ux,load_ux,load_u,\ - load_l,sync") + (and (eq_attr "type" "load,load_l,sync") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_lsu") (define_insn_reservation "e5500_fpload" 4 - (and (eq_attr "type" "fpload,fpload_ux,fpload_u") + (and (eq_attr "type" "fpload") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_lsu") ;; LSU - Stores. (define_insn_reservation "e5500_store" 3 - (and (eq_attr "type" "store,store_ux,store_u,store_c") + (and (eq_attr "type" "store,store_c") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_lsu") (define_insn_reservation "e5500_fpstore" 3 - (and (eq_attr "type" "fpstore,fpstore_ux,fpstore_u") + (and (eq_attr "type" "fpstore") (eq_attr "cpu" "ppce5500")) "e5500_decode,e5500_lsu") |