Home | History | Annotate | Line # | Download | only in sh
sh4a.md revision 1.9
      1  1.1  mrg ;; Scheduling description for Renesas SH4a
      2  1.9  mrg ;; Copyright (C) 2003-2018 Free Software Foundation, Inc.
      3  1.1  mrg ;;
      4  1.1  mrg ;; This file is part of GCC.
      5  1.1  mrg ;;
      6  1.1  mrg ;; GNU CC is free software; you can redistribute it and/or modify
      7  1.1  mrg ;; it under the terms of the GNU General Public License as published by
      8  1.1  mrg ;; the Free Software Foundation; either version 3, or (at your option)
      9  1.1  mrg ;; any later version.
     10  1.1  mrg ;;
     11  1.1  mrg ;; GNU CC is distributed in the hope that it will be useful,
     12  1.1  mrg ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
     13  1.1  mrg ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14  1.1  mrg ;; GNU General Public License for more details.
     15  1.1  mrg ;;
     16  1.1  mrg ;; You should have received a copy of the GNU General Public License
     17  1.1  mrg ;; along with GCC; see the file COPYING3.  If not see
     18  1.1  mrg ;; <http://www.gnu.org/licenses/>.
     19  1.1  mrg 
     20  1.1  mrg ;; The following description models the SH4A pipeline
     21  1.1  mrg ;; using the DFA based scheduler.
     22  1.1  mrg (define_automaton "sh4a")
     23  1.1  mrg 
     24  1.1  mrg (define_cpu_unit "sh4a_ex"   "sh4a")
     25  1.1  mrg (define_cpu_unit "sh4a_ls"   "sh4a")
     26  1.1  mrg (define_cpu_unit "sh4a_fex"  "sh4a")
     27  1.1  mrg (define_cpu_unit "sh4a_fls"  "sh4a")
     28  1.1  mrg (define_cpu_unit "sh4a_mult" "sh4a")
     29  1.1  mrg (define_cpu_unit "sh4a_fdiv" "sh4a")
     30  1.1  mrg 
     31  1.1  mrg ;; Decoding is done on the integer pipeline like the
     32  1.1  mrg ;; sh4. Define issue to be the | of the two pipelines
     33  1.1  mrg ;; to control how often instructions are issued.
     34  1.1  mrg (define_reservation "ID_or" "sh4a_ex|sh4a_ls")
     35  1.1  mrg (define_reservation "ID_and" "sh4a_ex+sh4a_ls")
     36  1.1  mrg 
     37  1.1  mrg ;; =======================================================
     38  1.1  mrg ;; Locking Descriptions
     39  1.1  mrg 
     40  1.1  mrg ;; Sh4a_Memory access on the LS pipeline.
     41  1.1  mrg (define_cpu_unit "sh4a_memory" "sh4a")
     42  1.1  mrg 
     43  1.1  mrg ;; Other access on the LS pipeline.
     44  1.1  mrg (define_cpu_unit "sh4a_load_store" "sh4a")
     45  1.1  mrg 
     46  1.1  mrg ;;  The address calculator used for branch instructions.
     47  1.1  mrg ;; This will be reserved after "issue" of branch instructions
     48  1.1  mrg ;; and this is to make sure that no two branch instructions
     49  1.1  mrg ;; can be issued in parallel.
     50  1.1  mrg (define_reservation "sh4a_addrcalc" "sh4a_ex")
     51  1.1  mrg 
     52  1.1  mrg ;; =======================================================
     53  1.1  mrg ;; Reservations
     54  1.1  mrg 
     55  1.1  mrg ;; Branch (BF,BF/S,BT,BT/S,BRA,BSR)
     56  1.1  mrg ;; Group: BR
     57  1.1  mrg ;; Latency when taken: 2
     58  1.1  mrg (define_insn_reservation "sh4a_branch" 2
     59  1.1  mrg   (and (eq_attr "cpu" "sh4a")
     60  1.1  mrg        (eq_attr "type" "cbranch,jump"))
     61  1.1  mrg   "ID_or+sh4a_addrcalc")
     62  1.1  mrg 
     63  1.1  mrg ;; Jump (JSR,JMP,RTS)
     64  1.1  mrg ;; Group: BR
     65  1.1  mrg ;; Latency: 3
     66  1.1  mrg (define_insn_reservation "sh4a_jump" 3
     67  1.1  mrg   (and (eq_attr "cpu" "sh4a")
     68  1.1  mrg        (eq_attr "type" "return,jump_ind"))
     69  1.1  mrg   "ID_or+sh4a_addrcalc")
     70  1.1  mrg 
     71  1.1  mrg ;; RTE
     72  1.1  mrg ;; Group: CO
     73  1.1  mrg ;; Latency: 3
     74  1.1  mrg (define_insn_reservation "sh4a_rte" 3
     75  1.1  mrg   (and (eq_attr "cpu" "sh4a")
     76  1.1  mrg        (eq_attr "type" "rte"))
     77  1.1  mrg   "ID_and*4")
     78  1.1  mrg 
     79  1.1  mrg ;; EX Group Single
     80  1.1  mrg ;; Group: EX
     81  1.1  mrg ;; Latency: 0
     82  1.1  mrg (define_insn_reservation "sh4a_ex" 0
     83  1.1  mrg   (and (eq_attr "cpu" "sh4a")
     84  1.1  mrg        (eq_attr "insn_class" "ex_group"))
     85  1.1  mrg   "sh4a_ex")
     86  1.1  mrg 
     87  1.1  mrg ;; MOVA
     88  1.1  mrg ;; Group: LS
     89  1.1  mrg ;; Latency: 1
     90  1.1  mrg (define_insn_reservation "sh4a_mova" 1
     91  1.1  mrg   (and (eq_attr "cpu" "sh4a")
     92  1.1  mrg        (eq_attr "type" "mova"))
     93  1.1  mrg   "sh4a_ls+sh4a_load_store")
     94  1.1  mrg 
     95  1.1  mrg ;; MOV
     96  1.1  mrg ;; Group: MT
     97  1.1  mrg ;; Latency: 0
     98  1.1  mrg ;; ??? not sure if movi8 belongs here, but that's where it was
     99  1.1  mrg ;; effectively before.
    100  1.1  mrg (define_insn_reservation "sh4a_mov" 0
    101  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    102  1.1  mrg        (eq_attr "type" "move,movi8,gp_mac"))
    103  1.1  mrg   "ID_or")
    104  1.1  mrg 
    105  1.1  mrg ;; Load
    106  1.1  mrg ;; Group: LS
    107  1.1  mrg ;; Latency: 3
    108  1.1  mrg (define_insn_reservation "sh4a_load" 3
    109  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    110  1.1  mrg        (eq_attr "type" "load,pcload,mem_mac"))
    111  1.1  mrg   "sh4a_ls+sh4a_memory")
    112  1.1  mrg 
    113  1.1  mrg (define_insn_reservation "sh4a_load_si" 3
    114  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    115  1.1  mrg        (eq_attr "type" "load_si,pcload_si"))
    116  1.1  mrg   "sh4a_ls+sh4a_memory")
    117  1.1  mrg 
    118  1.1  mrg ;; Store
    119  1.1  mrg ;; Group: LS
    120  1.1  mrg ;; Latency: 0
    121  1.1  mrg (define_insn_reservation "sh4a_store" 0
    122  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    123  1.1  mrg        (eq_attr "type" "store,fstore,mac_mem"))
    124  1.1  mrg   "sh4a_ls+sh4a_memory")
    125  1.1  mrg 
    126  1.1  mrg ;; CWB TYPE
    127  1.1  mrg 
    128  1.1  mrg ;; MOVUA
    129  1.1  mrg ;; Group: LS
    130  1.1  mrg ;; Latency: 3
    131  1.1  mrg (define_insn_reservation "sh4a_movua" 3
    132  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    133  1.1  mrg        (eq_attr "type" "movua"))
    134  1.1  mrg   "sh4a_ls+sh4a_memory*2")
    135  1.1  mrg 
    136  1.1  mrg ;; Fixed point multiplication (single)
    137  1.1  mrg ;; Group: CO
    138  1.1  mrg ;; Latency: 2
    139  1.1  mrg (define_insn_reservation "sh4a_smult" 2
    140  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    141  1.1  mrg        (eq_attr "type" "smpy"))
    142  1.1  mrg   "ID_or+sh4a_mult")
    143  1.1  mrg 
    144  1.1  mrg ;; Fixed point multiplication (double)
    145  1.1  mrg ;; Group: CO
    146  1.1  mrg ;; Latency: 3
    147  1.1  mrg (define_insn_reservation "sh4a_dmult" 3
    148  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    149  1.1  mrg        (eq_attr "type" "dmpy"))
    150  1.1  mrg   "ID_or+sh4a_mult")
    151  1.1  mrg 
    152  1.1  mrg (define_insn_reservation "sh4a_mac_gp" 3
    153  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    154  1.1  mrg        (eq_attr "type" "mac_gp"))
    155  1.1  mrg   "ID_and")
    156  1.1  mrg 
    157  1.1  mrg ;; Other MT  group instructions(1 step operations)
    158  1.1  mrg ;; Group:	MT
    159  1.1  mrg ;; Latency: 	1
    160  1.1  mrg (define_insn_reservation "sh4a_mt" 1
    161  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    162  1.1  mrg        (eq_attr "type" "mt_group"))
    163  1.1  mrg   "ID_or")
    164  1.1  mrg 
    165  1.1  mrg ;; Floating point reg move
    166  1.1  mrg ;; Group: LS
    167  1.1  mrg ;; Latency: 2
    168  1.1  mrg (define_insn_reservation "sh4a_freg_mov" 2
    169  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    170  1.1  mrg        (eq_attr "type" "fmove"))
    171  1.1  mrg   "sh4a_ls,sh4a_fls")
    172  1.1  mrg 
    173  1.1  mrg ;; Single precision floating point computation FCMP/EQ,
    174  1.1  mrg ;; FCMP/GT, FADD, FLOAT, FMAC, FMUL, FSUB, FTRC, FRVHG, FSCHG
    175  1.1  mrg ;; Group:	FE
    176  1.1  mrg ;; Latency: 	3
    177  1.1  mrg (define_insn_reservation "sh4a_fp_arith"  3
    178  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    179  1.1  mrg        (eq_attr "type" "fp,fp_cmp,fpscr_toggle"))
    180  1.1  mrg   "ID_or,sh4a_fex")
    181  1.1  mrg 
    182  1.1  mrg (define_insn_reservation "sh4a_fp_arith_ftrc"  3
    183  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    184  1.1  mrg        (eq_attr "type" "ftrc_s"))
    185  1.1  mrg   "ID_or,sh4a_fex")
    186  1.1  mrg 
    187  1.1  mrg ;; Single-precision FDIV/FSQRT
    188  1.1  mrg ;; Group: FE
    189  1.1  mrg ;; Latency: 20
    190  1.1  mrg (define_insn_reservation "sh4a_fdiv" 20
    191  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    192  1.1  mrg        (eq_attr "type" "fdiv"))
    193  1.1  mrg   "ID_or,sh4a_fex+sh4a_fdiv,sh4a_fex")
    194  1.1  mrg 
    195  1.1  mrg ;; Double Precision floating point computation
    196  1.1  mrg ;; (FCNVDS, FCNVSD, FLOAT, FTRC)
    197  1.1  mrg ;; Group:	FE
    198  1.1  mrg ;; Latency: 	3
    199  1.1  mrg (define_insn_reservation "sh4a_dp_float" 3
    200  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    201  1.1  mrg        (eq_attr "type" "dfp_conv"))
    202  1.1  mrg   "ID_or,sh4a_fex")
    203  1.1  mrg 
    204  1.1  mrg ;; Double-precision floating-point (FADD,FMUL,FSUB)
    205  1.1  mrg ;; Group:	FE
    206  1.1  mrg ;; Latency: 	5
    207  1.1  mrg (define_insn_reservation "sh4a_fp_double_arith" 5
    208  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    209  1.1  mrg        (eq_attr "type" "dfp_arith,dfp_mul"))
    210  1.1  mrg   "ID_or,sh4a_fex*3")
    211  1.1  mrg 
    212  1.1  mrg ;; Double precision FDIV/SQRT
    213  1.1  mrg ;; Group:	FE
    214  1.1  mrg ;; Latency: 	36
    215  1.1  mrg (define_insn_reservation "sh4a_dp_div" 36
    216  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    217  1.1  mrg        (eq_attr "type" "dfdiv"))
    218  1.1  mrg   "ID_or,sh4a_fex+sh4a_fdiv,sh4a_fex*2")
    219  1.1  mrg 
    220  1.1  mrg ;; FSRRA
    221  1.1  mrg ;; Group: FE
    222  1.1  mrg ;; Latency: 5
    223  1.1  mrg (define_insn_reservation "sh4a_fsrra" 5
    224  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    225  1.1  mrg        (eq_attr "type" "fsrra"))
    226  1.1  mrg   "ID_or,sh4a_fex")
    227  1.1  mrg 
    228  1.1  mrg ;; FSCA
    229  1.1  mrg ;; Group: FE
    230  1.1  mrg ;; Latency: 7
    231  1.1  mrg (define_insn_reservation "sh4a_fsca" 7
    232  1.1  mrg   (and (eq_attr "cpu" "sh4a")
    233  1.1  mrg        (eq_attr "type" "fsca"))
    234  1.1  mrg   "ID_or,sh4a_fex*3")
    235