1;; Scheduling description for TI C6X. 2;; Copyright (C) 2010-2020 Free Software Foundation, Inc. 3;; Contributed by Bernd Schmidt <bernds@codesourcery.com> 4;; Contributed by CodeSourcery. 5;; 6;; This file is part of GCC. 7;; 8;; GCC is free software; you can redistribute it and/or modify 9;; it under the terms of the GNU General Public License as published by 10;; the Free Software Foundation; either version 3, or (at your option) 11;; any later version. 12;; 13;; GCC is distributed in the hope that it will be useful, 14;; but WITHOUT ANY WARRANTY; without even the implied warranty of 15;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16;; GNU General Public License for more details. 17;; 18;; You should have received a copy of the GNU General Public License 19;; along with GCC; see the file COPYING3. If not see 20;; <http://www.gnu.org/licenses/>. 21 22;; Input file for gensched.sh We process this file multiple times, 23;; replacing _N_ with either 1 or 2 for each of the sides of the 24;; machine, and _RF_ correspondingly with "a" or "b". _CROSS_ and 25;; _CUNIT_ are replaced with yes/no and the appropriate reservation. 26 27(define_insn_reservation "load_d_N__CROSS_" 5 28 (and (eq_attr "type" "load") 29 (and (eq_attr "cross" "_CROSS_") 30 (and (eq_attr "units" "d_addr") 31 (eq_attr "addr_regfile" "_RF_")))) 32 "d_N_+t_NX_") 33 34(define_insn_reservation "store_d_N__CROSS_" 1 35 (and (eq_attr "type" "store") 36 (and (eq_attr "cross" "_CROSS_") 37 (and (eq_attr "units" "d_addr") 38 (eq_attr "addr_regfile" "_RF_")))) 39 "d_N_+t_NX_") 40 41(define_insn_reservation "loadn_d_N__CROSS_" 5 42 (and (eq_attr "type" "loadn") 43 (and (eq_attr "cross" "_CROSS_") 44 (and (eq_attr "units" "d_addr") 45 (eq_attr "addr_regfile" "_RF_")))) 46 "d_N_+t1+t2") 47 48(define_insn_reservation "storen_d_N__CROSS_" 1 49 (and (eq_attr "type" "storen") 50 (and (eq_attr "cross" "_CROSS_") 51 (and (eq_attr "units" "d_addr") 52 (eq_attr "addr_regfile" "_RF_")))) 53 "d_N_+t1+t2") 54 55(define_insn_reservation "single_d_N__CROSS_" 1 56 (and (eq_attr "type" "single") 57 (and (eq_attr "cross" "_CROSS_") 58 (and (eq_attr "units" "d") 59 (eq_attr "dest_regfile" "_RF_")))) 60 "d_N__CUNIT_") 61 62(define_insn_reservation "single_l_N__CROSS_" 1 63 (and (eq_attr "type" "single") 64 (and (eq_attr "cross" "_CROSS_") 65 (and (eq_attr "units" "l") 66 (eq_attr "dest_regfile" "_RF_")))) 67 "l_N_+l_N_w_CUNIT_") 68 69(define_insn_reservation "fp4_l_N__CROSS_" 4 70 (and (eq_attr "type" "fp4") 71 (and (eq_attr "cross" "_CROSS_") 72 (and (eq_attr "units" "l") 73 (eq_attr "dest_regfile" "_RF_")))) 74 "l_N__CUNIT_,nothing*2,l_N_w") 75 76(define_insn_reservation "intdp_l_N__CROSS_" 5 77 (and (eq_attr "type" "intdp") 78 (and (eq_attr "cross" "_CROSS_") 79 (and (eq_attr "units" "l") 80 (eq_attr "dest_regfile" "_RF_")))) 81 "l_N__CUNIT_,nothing*2,l_N_w*2") 82 83(define_insn_reservation "adddp_l_N__CROSS_" 7 84 (and (eq_attr "type" "adddp") 85 (and (eq_attr "cross" "_CROSS_") 86 (and (eq_attr "units" "l") 87 (eq_attr "dest_regfile" "_RF_")))) 88 "(l_N__CUNIT_)*2,nothing*3,l_N_w*2") 89 90(define_insn_reservation "branch_s_N__CROSS_" 6 91 (and (eq_attr "type" "branch") 92 (and (eq_attr "cross" "_CROSS_") 93 (and (eq_attr "units" "s") 94 (eq_attr "dest_regfile" "_RF_")))) 95 "(s_N_+s_N_w)_CUNIT_+br1") 96 97(define_insn_reservation "call_addkpc_s_N__CROSS_" 6 98 (and (eq_attr "type" "call") 99 (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0)) 100 (and (eq_attr "cross" "_CROSS_") 101 (and (eq_attr "units" "s") 102 (eq_attr "dest_regfile" "_RF_"))))) 103 "(s_N_+s_N_w)_CUNIT_+br1,s2+br0+br1") 104 105(define_insn_reservation "call_mvk_s_N__CROSS_" 6 106 (and (eq_attr "type" "call") 107 (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0)) 108 (and (eq_attr "cross" "_CROSS_") 109 (and (eq_attr "units" "s") 110 (eq_attr "dest_regfile" "_RF_"))))) 111 "(s_N_+s_N_w)_CUNIT_+br1,s2,s2") 112 113(define_insn_reservation "single_s_N__CROSS_" 1 114 (and (eq_attr "type" "single") 115 (and (eq_attr "cross" "_CROSS_") 116 (and (eq_attr "units" "s") 117 (eq_attr "dest_regfile" "_RF_")))) 118 "(s_N_+s_N_w)_CUNIT_") 119 120(define_insn_reservation "cmpdp_s_N__CROSS_" 2 121 (and (eq_attr "type" "cmpdp") 122 (and (eq_attr "cross" "_CROSS_") 123 (and (eq_attr "units" "s") 124 (eq_attr "dest_regfile" "_RF_")))) 125 "s_N__CUNIT_,(s_N__CUNIT_)+s_N_w") 126 127(define_insn_reservation "dp2_s_N__CROSS_" 2 128 (and (eq_attr "type" "dp2") 129 (and (eq_attr "cross" "_CROSS_") 130 (and (eq_attr "units" "s") 131 (eq_attr "dest_regfile" "_RF_")))) 132 "s_N_+s_N_w_CUNIT_,s_N_w") 133 134(define_insn_reservation "fp4_s_N__CROSS_" 4 135 (and (eq_attr "type" "fp4") 136 (and (eq_attr "cross" "_CROSS_") 137 (and (eq_attr "units" "s") 138 (eq_attr "dest_regfile" "_RF_")))) 139 "s_N__CUNIT_,nothing*2,s_N_w") 140 141(define_insn_reservation "mvilc4_s_N__CROSS_" 4 142 (and (eq_attr "type" "mvilc") 143 (and (eq_attr "cross" "_CROSS_") 144 (and (eq_attr "units" "s") 145 (eq_attr "dest_regfile" "_RF_")))) 146 "(s_N_+s_N_w)_CUNIT_") 147 148(define_insn_reservation "single_dl_N__CROSS_" 1 149 (and (eq_attr "type" "single") 150 (and (eq_attr "cross" "_CROSS_") 151 (and (eq_attr "units" "dl") 152 (eq_attr "dest_regfile" "_RF_")))) 153 "(d_N_|(l_N_+l_N_w))_CUNIT_") 154 155(define_insn_reservation "single_ds_N__CROSS_" 1 156 (and (eq_attr "type" "single") 157 (and (eq_attr "cross" "_CROSS_") 158 (and (eq_attr "units" "ds") 159 (eq_attr "dest_regfile" "_RF_")))) 160 "(d_N_|(s_N_+s_N_w))_CUNIT_") 161 162(define_insn_reservation "single_ls_N__CROSS_" 1 163 (and (eq_attr "type" "single") 164 (and (eq_attr "cross" "_CROSS_") 165 (and (eq_attr "units" "ls") 166 (eq_attr "dest_regfile" "_RF_")))) 167 "((l_N_+l_N_w)|(s_N_+s_N_w))_CUNIT_") 168 169(define_insn_reservation "dp2_l_N__CROSS_" 2 170 (and (eq_attr "type" "dp2") 171 (and (eq_attr "cross" "_CROSS_") 172 (and (eq_attr "units" "l") 173 (eq_attr "dest_regfile" "_RF_")))) 174 "l_N_+l_N_w_CUNIT_,l_N_w") 175 176(define_insn_reservation "fp4_ls_N__CROSS_" 4 177 (and (eq_attr "type" "fp4") 178 (and (eq_attr "cross" "_CROSS_") 179 (and (eq_attr "units" "ls") 180 (eq_attr "dest_regfile" "_RF_")))) 181 "(fps_N_+s_N__CUNIT_,nothing*2,s_N_w)|(fpl_N_+l_N__CUNIT_,nothing*2,l_N_w)") 182 183(define_insn_reservation "adddp_ls_N__CROSS_" 7 184 (and (eq_attr "type" "adddp") 185 (and (eq_attr "cross" "_CROSS_") 186 (and (eq_attr "units" "ls") 187 (eq_attr "dest_regfile" "_RF_")))) 188 "(adddps_N_+(s_N__CUNIT_)*2,nothing*3,s_N_w*2)|(adddpl_N_+(l_N__CUNIT_)*2,nothing*3,l_N_w*2)") 189 190(define_insn_reservation "single_dls_N__CROSS_" 1 191 (and (eq_attr "type" "single") 192 (and (eq_attr "cross" "_CROSS_") 193 (and (eq_attr "units" "dls") 194 (eq_attr "dest_regfile" "_RF_")))) 195 "(d_N_|(l_N_+l_N_w)|(s_N_+s_N_w))_CUNIT_") 196 197(define_insn_reservation "mpy2_m_N__CROSS_" 2 198 (and (eq_attr "type" "mpy2") 199 (and (eq_attr "cross" "_CROSS_") 200 (and (eq_attr "units" "m") 201 (eq_attr "dest_regfile" "_RF_")))) 202 "m_N__CUNIT_,m_N_w") 203 204(define_insn_reservation "mpy4_m_N__CROSS_" 4 205 (and (eq_attr "type" "mpy4") 206 (and (eq_attr "cross" "_CROSS_") 207 (and (eq_attr "units" "m") 208 (eq_attr "dest_regfile" "_RF_")))) 209 "m_N__CUNIT_,nothing,nothing,m_N_w") 210 211(define_insn_reservation "mpydp_m_N__CROSS_" 10 212 (and (eq_attr "type" "mpydp") 213 (and (eq_attr "cross" "_CROSS_") 214 (and (eq_attr "units" "m") 215 (eq_attr "dest_regfile" "_RF_")))) 216 "(m_N__CUNIT_)*4,nothing*4,m_N_w*2") 217 218(define_insn_reservation "mpyspdp_m_N__CROSS_" 7 219 (and (eq_attr "type" "mpyspdp") 220 (and (eq_attr "cross" "_CROSS_") 221 (and (eq_attr "units" "m") 222 (eq_attr "dest_regfile" "_RF_")))) 223 "(m_N__CUNIT_)*2,nothing*3,m_N_w*2") 224 225(define_insn_reservation "mpysp2dp_m_N__CROSS_" 5 226 (and (eq_attr "type" "mpysp2dp") 227 (and (eq_attr "cross" "_CROSS_") 228 (and (eq_attr "units" "m") 229 (eq_attr "dest_regfile" "_RF_")))) 230 "m_N__CUNIT_,nothing*2,m_N_w*2") 231