1 ;; Pipeline descriptions of Andes NDS32 cpu for GNU compiler 2 ;; Copyright (C) 2012-2022 Free Software Foundation, Inc. 3 ;; Contributed by Andes Technology Corporation. 4 ;; 5 ;; This file is part of GCC. 6 ;; 7 ;; GCC is free software; you can redistribute it and/or modify it 8 ;; under the terms of the GNU General Public License as published 9 ;; by the Free Software Foundation; either version 3, or (at your 10 ;; option) any later version. 11 ;; 12 ;; GCC is distributed in the hope that it will be useful, but WITHOUT 13 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14 ;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15 ;; License for more details. 16 ;; 17 ;; You should have received a copy of the GNU General Public License 18 ;; along with GCC; see the file COPYING3. If not see 19 ;; <http://www.gnu.org/licenses/>. 20 21 22 ;; ------------------------------------------------------------------------ 23 ;; Define N13 pipeline settings. 24 ;; ------------------------------------------------------------------------ 25 26 (define_automaton "nds32_n13_machine") 27 28 ;; ------------------------------------------------------------------------ 29 ;; Pipeline Stages 30 ;; ------------------------------------------------------------------------ 31 ;; F1 - Instruction Fetch First 32 ;; Instruction Tag/Data Arrays 33 ;; ITLB Address Translation 34 ;; Branch Target Buffer Prediction 35 ;; F2 - Instruction Fetch Second 36 ;; Instruction Cache Hit Detection 37 ;; Cache Way Selection 38 ;; Inustruction Alignment 39 ;; I1 - Instruction Issue First / Instruction Decode 40 ;; Instruction Cache Replay Triggering 41 ;; 32/16-Bit Instruction Decode 42 ;; Return Address Stack Prediction 43 ;; I2 - Instruction Issue Second / Register File Access 44 ;; Instruction Issue Logic 45 ;; Register File Access 46 ;; E1 - Instruction Execute First / Address Generation / MAC First 47 ;; Data Access Address generation 48 ;; Multiply Operation 49 ;; E2 - Instruction Execute Second / Data Access First / MAC Second / 50 ;; ALU Execute 51 ;; Skewed ALU 52 ;; Branch/Jump/Return Resolution 53 ;; Data Tag/Data arrays 54 ;; DTLB address translation 55 ;; Accumulation Operation 56 ;; E3 - Instruction Execute Third / Data Access Second 57 ;; Data Cache Hit Detection 58 ;; Cache Way Selection 59 ;; Data Alignment 60 ;; E4 - Instruction Execute Fourth / Write Back 61 ;; Interruption Resolution 62 ;; Instruction Retire 63 ;; Register File Write Back 64 65 (define_cpu_unit "n13_i1" "nds32_n13_machine") 66 (define_cpu_unit "n13_i2" "nds32_n13_machine") 67 (define_cpu_unit "n13_e1" "nds32_n13_machine") 68 (define_cpu_unit "n13_e2" "nds32_n13_machine") 69 (define_cpu_unit "n13_e3" "nds32_n13_machine") 70 (define_cpu_unit "n13_e4" "nds32_n13_machine") 71 72 (define_insn_reservation "nds_n13_unknown" 1 73 (and (eq_attr "type" "unknown") 74 (eq_attr "pipeline_model" "n13")) 75 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 76 77 (define_insn_reservation "nds_n13_misc" 1 78 (and (eq_attr "type" "misc") 79 (eq_attr "pipeline_model" "n13")) 80 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 81 82 (define_insn_reservation "nds_n13_mmu" 1 83 (and (eq_attr "type" "mmu") 84 (eq_attr "pipeline_model" "n13")) 85 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 86 87 (define_insn_reservation "nds_n13_alu" 1 88 (and (eq_attr "type" "alu") 89 (eq_attr "pipeline_model" "n13")) 90 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 91 92 (define_insn_reservation "nds_n13_alu_shift" 1 93 (and (eq_attr "type" "alu_shift") 94 (eq_attr "pipeline_model" "n13")) 95 "n13_i1, n13_i1+n13_i2, n13_i2+n13_e1, n13_e1+n13_e2, n13_e2+n13_e3, n13_e3+n13_e4, n13_e4") 96 97 (define_insn_reservation "nds_n13_pbsad" 1 98 (and (eq_attr "type" "pbsad") 99 (eq_attr "pipeline_model" "n13")) 100 "n13_i1, n13_i2, n13_e1, n13_e2*2, n13_e3, n13_e4") 101 102 (define_insn_reservation "nds_n13_pbsada" 1 103 (and (eq_attr "type" "pbsada") 104 (eq_attr "pipeline_model" "n13")) 105 "n13_i1, n13_i2, n13_e1, n13_e2*3, n13_e3, n13_e4") 106 107 (define_insn_reservation "nds_n13_load" 1 108 (and (match_test "nds32::load_single_p (insn)") 109 (eq_attr "pipeline_model" "n13")) 110 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 111 112 (define_insn_reservation "nds_n13_store" 1 113 (and (match_test "nds32::store_single_p (insn)") 114 (eq_attr "pipeline_model" "n13")) 115 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 116 117 (define_insn_reservation "nds_n13_load_multiple_1" 1 118 (and (and (eq_attr "type" "load_multiple") 119 (eq_attr "combo" "1")) 120 (eq_attr "pipeline_model" "n13")) 121 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 122 123 (define_insn_reservation "nds_n13_load_multiple_2" 1 124 (and (ior (and (eq_attr "type" "load_multiple") 125 (eq_attr "combo" "2")) 126 (match_test "nds32::load_double_p (insn)")) 127 (eq_attr "pipeline_model" "n13")) 128 "n13_i1, n13_i1+n13_i2, n13_i2+n13_e1, n13_e1+n13_e2, n13_e2+n13_e3, n13_e3+n13_e4, n13_e4") 129 130 (define_insn_reservation "nds_n13_load_multiple_3" 1 131 (and (and (eq_attr "type" "load_multiple") 132 (eq_attr "combo" "3")) 133 (eq_attr "pipeline_model" "n13")) 134 "n13_i1, n13_i2+n13_i2, n13_i1+n13_i2+n13_e1, n13_i2+n13_e1+n13_e2, n13_e1+n13_e2+n13_e3, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 135 136 (define_insn_reservation "nds_n13_load_multiple_4" 1 137 (and (and (eq_attr "type" "load_multiple") 138 (eq_attr "combo" "4")) 139 (eq_attr "pipeline_model" "n13")) 140 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i2+n13_e1+n13_e2+n13_e3, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 141 142 (define_insn_reservation "nds_n13_load_multiple_5" 1 143 (and (and (eq_attr "type" "load_multiple") 144 (eq_attr "combo" "5")) 145 (eq_attr "pipeline_model" "n13")) 146 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 147 148 (define_insn_reservation "nds_n13_load_multiple_6" 1 149 (and (and (eq_attr "type" "load_multiple") 150 (eq_attr "combo" "6")) 151 (eq_attr "pipeline_model" "n13")) 152 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 153 154 (define_insn_reservation "nds_n13_load_multiple_7" 1 155 (and (and (eq_attr "type" "load_multiple") 156 (eq_attr "combo" "7")) 157 (eq_attr "pipeline_model" "n13")) 158 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, (n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4)*2, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 159 160 (define_insn_reservation "nds_n13_load_multiple_8" 1 161 (and (and (eq_attr "type" "load_multiple") 162 (eq_attr "combo" "8")) 163 (eq_attr "pipeline_model" "n13")) 164 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, (n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4)*3, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 165 166 (define_insn_reservation "nds_n13_load_multiple_12" 1 167 (and (and (eq_attr "type" "load_multiple") 168 (eq_attr "combo" "12")) 169 (eq_attr "pipeline_model" "n13")) 170 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, (n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4)*7, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 171 172 (define_insn_reservation "nds_n13_store_multiple_1" 1 173 (and (and (eq_attr "type" "store_multiple") 174 (eq_attr "combo" "1")) 175 (eq_attr "pipeline_model" "n13")) 176 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 177 178 (define_insn_reservation "nds_n13_store_multiple_2" 1 179 (and (ior (and (eq_attr "type" "store_multiple") 180 (eq_attr "combo" "2")) 181 (match_test "nds32::store_double_p (insn)")) 182 (eq_attr "pipeline_model" "n13")) 183 "n13_i1, n13_i1+n13_i2, n13_i2+n13_e1, n13_e1+n13_e2, n13_e2+n13_e3, n13_e3+n13_e4, n13_e4") 184 185 (define_insn_reservation "nds_n13_store_multiple_3" 1 186 (and (and (eq_attr "type" "store_multiple") 187 (eq_attr "combo" "3")) 188 (eq_attr "pipeline_model" "n13")) 189 "n13_i1, n13_i2+n13_i2, n13_i1+n13_i2+n13_e1, n13_i2+n13_e1+n13_e2, n13_e1+n13_e2+n13_e3, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 190 191 (define_insn_reservation "nds_n13_store_multiple_4" 1 192 (and (and (eq_attr "type" "store_multiple") 193 (eq_attr "combo" "4")) 194 (eq_attr "pipeline_model" "n13")) 195 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i2+n13_e1+n13_e2+n13_e3, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 196 197 (define_insn_reservation "nds_n13_store_multiple_5" 1 198 (and (and (eq_attr "type" "store_multiple") 199 (eq_attr "combo" "5")) 200 (eq_attr "pipeline_model" "n13")) 201 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 202 203 (define_insn_reservation "nds_n13_store_multiple_6" 1 204 (and (and (eq_attr "type" "store_multiple") 205 (eq_attr "combo" "6")) 206 (eq_attr "pipeline_model" "n13")) 207 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 208 209 (define_insn_reservation "nds_n13_store_multiple_7" 1 210 (and (and (eq_attr "type" "store_multiple") 211 (eq_attr "combo" "7")) 212 (eq_attr "pipeline_model" "n13")) 213 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, (n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4)*2, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 214 215 (define_insn_reservation "nds_n13_store_multiple_8" 1 216 (and (and (eq_attr "type" "store_multiple") 217 (eq_attr "combo" "8")) 218 (eq_attr "pipeline_model" "n13")) 219 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, (n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4)*3, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 220 221 (define_insn_reservation "nds_n13_store_multiple_12" 1 222 (and (and (eq_attr "type" "store_multiple") 223 (eq_attr "combo" "12")) 224 (eq_attr "pipeline_model" "n13")) 225 "n13_i1, n13_i1+n13_i2, n13_i1+n13_i2+n13_e1, n13_i1+n13_i2+n13_e1+n13_e2, n13_i1+n13_i2+n13_e1+n13_e2+n13_e3, (n13_i1+n13_i2+n13_e1+n13_e2+n13_e3+n13_e4)*7, n13_i2+n13_e1+n13_e2+n13_e3+n13_e4, n13_e1+n13_e2+n13_e3+n13_e4, n13_e2+n13_e3+n13_e4, n13_e3+n13_e4, n13_e4") 226 227 ;; The multiplier at E1 takes two cycles. 228 (define_insn_reservation "nds_n13_mul" 1 229 (and (eq_attr "type" "mul") 230 (eq_attr "pipeline_model" "n13")) 231 "n13_i1, n13_i2, n13_e1*2, n13_e2, n13_e3, n13_e4") 232 233 (define_insn_reservation "nds_n13_mac" 1 234 (and (eq_attr "type" "mac") 235 (eq_attr "pipeline_model" "n13")) 236 "n13_i1, n13_i2, n13_e1*2, n13_e2, n13_e3, n13_e4") 237 238 ;; The cycles consumed at E2 are 32 - CLZ(abs(Ra)) + 2, 239 ;; so the worst case is 34. 240 (define_insn_reservation "nds_n13_div" 1 241 (and (eq_attr "type" "div") 242 (eq_attr "pipeline_model" "n13")) 243 "n13_i1, n13_i2, n13_e1, n13_e2*34, n13_e3, n13_e4") 244 245 (define_insn_reservation "nds_n13_branch" 1 246 (and (eq_attr "type" "branch") 247 (eq_attr "pipeline_model" "n13")) 248 "n13_i1, n13_i2, n13_e1, n13_e2, n13_e3, n13_e4") 249 250 ;; ------------------------------------------------------------------------ 251 ;; Comment Notations and Bypass Rules 252 ;; ------------------------------------------------------------------------ 253 ;; Producers (LHS) 254 ;; LD 255 ;; Load data from the memory and produce the loaded data. The result is 256 ;; ready at E3. 257 ;; LMW(N, M) 258 ;; There are N micro-operations within an instruction that loads multiple 259 ;; words. The result produced by the M-th micro-operation is sent to 260 ;; consumers. The result is ready at E3. 261 ;; ADDR_OUT 262 ;; Most load/store instructions can produce an address output if updating 263 ;; the base register is required. The result is ready at E2, which is 264 ;; produced by ALU. 265 ;; ALU, ALU_SHIFT, SIMD 266 ;; Compute data in ALU and produce the data. The result is ready at E2. 267 ;; MUL, MAC 268 ;; Compute data in the multiply-adder and produce the data. The result 269 ;; is ready at E2. 270 ;; DIV 271 ;; Compute data in the divider and produce the data. The result is ready 272 ;; at E2. 273 ;; BR 274 ;; Branch-with-link instructions produces a result containing the return 275 ;; address. The result is ready at E2. 276 ;; 277 ;; Consumers (RHS) 278 ;; ALU 279 ;; General ALU instructions require operands at E2. 280 ;; ALU_E1 281 ;; Some special ALU instructions, such as BSE, BSP and MOVD44, require 282 ;; operand at E1. 283 ;; MUL, DIV, PBSAD, MMU 284 ;; Operands are required at E1. 285 ;; PBSADA_Rt, PBSADA_RaRb 286 ;; Operands Ra and Rb are required at E1, and the operand Rt is required 287 ;; at E2. 288 ;; ALU_SHIFT_Rb 289 ;; An ALU-SHIFT instruction consists of a shift micro-operation followed 290 ;; by an arithmetic micro-operation. The operand Rb is used by the first 291 ;; micro-operation, and there are some latencies if data dependency occurs. 292 ;; MAC_RaRb 293 ;; A MAC instruction does multiplication at E1 and does accumulation at E2, 294 ;; so the operand Rt is required at E2, and operands Ra and Rb are required 295 ;; at E1. 296 ;; ADDR_IN 297 ;; If an instruction requires an address as its input operand, the address 298 ;; is required at E1. 299 ;; ST 300 ;; A store instruction requires its data at E2. 301 ;; SMW(N, M) 302 ;; There are N micro-operations within an instruction that stores multiple 303 ;; words. Each M-th micro-operation requires its data at E2. 304 ;; BR 305 ;; If a branch instruction is conditional, its input data is required at E2. 306 307 ;; LD -> ALU_E1, PBSAD, PBSADA_RaRb, MUL, MAC_RaRb, DIV, MMU, ADDR_IN 308 (define_bypass 3 309 "nds_n13_load" 310 "nds_n13_alu, nds_n13_pbsad, nds_n13_pbsada,\ 311 nds_n13_mul, nds_n13_mac, nds_n13_div,\ 312 nds_n13_mmu,\ 313 nds_n13_load, nds_n13_store,\ 314 nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 315 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 316 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12,\ 317 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 318 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 319 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 320 "nds32_n13_load_to_e1_p" 321 ) 322 323 ;; LD -> ALU, ALU_SHIFT_Rb, PBSADA_Rt, BR, ST, SMW(N, 1) 324 (define_bypass 2 325 "nds_n13_load" 326 "nds_n13_alu, nds_n13_alu_shift, nds_n13_pbsada, nds_n13_branch, nds_n13_store,\ 327 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 328 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 329 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 330 "nds32_n13_load_to_e2_p" 331 ) 332 333 ;; LMW(N, N) -> ALU_E1, PBSAD, PBSADA_RaRb, MUL, MAC_RaRb, DIV, MMU, ADDR_IN 334 (define_bypass 3 335 "nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 336 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 337 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12" 338 "nds_n13_alu, nds_n13_pbsad, nds_n13_pbsada,\ 339 nds_n13_mul, nds_n13_mac, nds_n13_div,\ 340 nds_n13_mmu,\ 341 nds_n13_load, nds_n13_store,\ 342 nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 343 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 344 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12,\ 345 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 346 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 347 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 348 "nds32_n13_last_load_to_e1_p") 349 350 ;; LMW(N, N) -> ALU, ALU_SHIFT_Rb, PBSADA_Rt, BR, ST, SMW(N, 1) 351 (define_bypass 2 352 "nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 353 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 354 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12" 355 "nds_n13_alu, nds_n13_alu_shift, nds_n13_pbsada, nds_n13_branch, nds_n13_store,\ 356 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 357 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 358 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 359 "nds32_n13_last_load_to_e2_p" 360 ) 361 362 ;; LMW(N, N - 1) -> ALU_E1, PBSAD, PBSADA_RaRb, MUL, MAC_RaRb, DIV, MMU, ADDR_IN 363 (define_bypass 2 364 "nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 365 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 366 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12" 367 "nds_n13_alu, nds_n13_pbsad, nds_n13_pbsada,\ 368 nds_n13_mul, nds_n13_mac, nds_n13_div,\ 369 nds_n13_mmu,\ 370 nds_n13_load, nds_n13_store,\ 371 nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 372 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 373 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12,\ 374 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 375 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 376 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 377 "nds32_n13_last_two_load_to_e1_p") 378 379 ;; ALU, ALU_SHIFT, SIMD, BR, MUL, MAC, DIV, ADDR_OUT 380 ;; -> ALU_E1, PBSAD, PBSADA_RaRb, MUL, MAC_RaRb, DIV, MMU, ADDR_IN 381 (define_bypass 2 382 "nds_n13_alu, nds_n13_alu_shift, nds_n13_pbsad, nds_n13_pbsada, nds_n13_branch,\ 383 nds_n13_mul, nds_n13_mac, nds_n13_div,\ 384 nds_n13_load, nds_n13_store,\ 385 nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 386 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 387 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12,\ 388 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 389 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 390 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 391 "nds_n13_alu, nds_n13_pbsad, nds_n13_pbsada,\ 392 nds_n13_mul, nds_n13_mac, nds_n13_div,\ 393 nds_n13_mmu,\ 394 nds_n13_load, nds_n13_store,\ 395 nds_n13_load_multiple_1,nds_n13_load_multiple_2, nds_n13_load_multiple_3,\ 396 nds_n13_load_multiple_4,nds_n13_load_multiple_5, nds_n13_load_multiple_6,\ 397 nds_n13_load_multiple_7,nds_n13_load_multiple_8, nds_n13_load_multiple_12,\ 398 nds_n13_store_multiple_1,nds_n13_store_multiple_2, nds_n13_store_multiple_3,\ 399 nds_n13_store_multiple_4,nds_n13_store_multiple_5, nds_n13_store_multiple_6,\ 400 nds_n13_store_multiple_7,nds_n13_store_multiple_8, nds_n13_store_multiple_12" 401 "nds32_n13_e2_to_e1_p") 402