1;; DFA scheduling description of the Synopsys DesignWare ARC600 cpu 2;; for GNU C compiler 3;; Copyright (C) 2007-2020 Free Software Foundation, Inc. 4;; Contributor: Joern Rennecke <joern.rennecke@embecosm.com> 5;; on behalf of Synopsys Inc. 6 7;; This file is part of GCC. 8 9;; GCC is free software; you can redistribute it and/or modify 10;; it under the terms of the GNU General Public License as published by 11;; the Free Software Foundation; either version 3, or (at your option) 12;; any later version. 13 14;; GCC is distributed in the hope that it will be useful, 15;; but WITHOUT ANY WARRANTY; without even the implied warranty of 16;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17;; GNU General Public License for more details. 18 19;; You should have received a copy of the GNU General Public License 20;; along with GCC; see the file COPYING3. If not see 21;; <http://www.gnu.org/licenses/>. 22 23(define_automaton "ARC600") 24 25(define_cpu_unit "issue_600" "ARC600") 26(define_cpu_unit "mul64_600" "ARC600") 27 28; latency from flag-setting insns to branches is 3. 29(define_insn_reservation "compare_600" 3 30 (and (eq_attr "tune" "arc600") 31 (eq_attr "type" "compare")) 32 "issue_600") 33 34(define_insn_reservation "load_DI_600" 4 35 (and (eq_attr "tune" "arc600") 36 (eq_attr "type" "load") 37 (match_operand:DI 0 "" "")) 38 "issue_600") 39 40(define_insn_reservation "load_600" 3 41 (and (eq_attr "tune" "arc600") 42 (eq_attr "type" "load") 43 (not (match_operand:DI 0 "" ""))) 44 "issue_600") 45 46(define_insn_reservation "mul_600_fast" 3 47 (and (eq_attr "tune" "arc600") 48 (match_test "arc_multcost < COSTS_N_INSNS (7)") 49 (eq_attr "type" "multi,umulti")) 50 "mul64_600*3") 51 52(define_insn_reservation "mul_600_slow" 8 53 (and (eq_attr "tune" "arc600") 54 (match_test "arc_multcost >= COSTS_N_INSNS (7)") 55 (eq_attr "type" "multi,umulti")) 56 "mul64_600*8") 57 58(define_insn_reservation "mul_mac_600" 3 59 (and (eq_attr "tune" "arc600") 60 (eq_attr "type" "mulmac_600")) 61 "nothing*3") 62 63(define_bypass 1 "mul_mac_600" "mul_mac_600") 64