Home | History | Annotate | Line # | Download | only in sh
sh4a.md revision 1.5.2.1
      1      1.1       mrg ;; Scheduling description for Renesas SH4a
      2  1.5.2.1  pgoyette ;; Copyright (C) 2003-2016 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