diff options
author | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-15 09:36:40 +0000 |
---|---|---|
committer | bernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-07-15 09:36:40 +0000 |
commit | 5aa04b01b2a9ac61afe98ec605c2f9a46be0cc03 (patch) | |
tree | c4bd2120a6d9ab956422bfe82ffb27dcc91bc73b /gcc/config/c6x/c6x-sched.md.in | |
parent | 1ab535cc0aef0c4291cd1963dcddf17c968bbe7b (diff) | |
download | gcc-5aa04b01b2a9ac61afe98ec605c2f9a46be0cc03.tar.gz |
gcc/
* doc/invoke.texi (C6X Options): New section.
* doc/md.texi (TI C6X family): New section.
* config.gcc: Handle tic6x, in particular tic6x-*-elf and
tic6x-*-uclinux.
* longlong.h (add_ssaaaa, __umulsidi3, umul_ppmm,
count_leading_zeros, count_trailing_zeros, UMUL_TIME, UDIV_TIME):
Provide C6X definitions.
* config/c6x/c6x.md: New file.
* config/c6x/constraints.md: New file.
* config/c6x/predicates.md: New file.
* config/c6x/c6x-sched.md.in: New file.
* config/c6x/c6x-sched.md: New file.
* config/c6x/gensched.sh: New file.
* config/c6x/c6x-mult.md.in: New file.
* config/c6x/genmult.sh: New file.
* config/c6x/c6x-mult.md: New file.
* config/c6x/sync.md: New file.
* config/c6x/c6x-protos.h: New file.
* config/c6x/sfp-machine.h: New file.
* config/c6x/c6x.c: New file.
* config/c6x/c6x.h: New file.
* config/c6x/crti.s: New file.
* config/c6x/crtn.s: New file.
* config/c6x/lib1funcs.asm: New file.
* config/c6x/c6x-modes.def: New file.
* config/c6x/genopt.sh: New file.
* config/c6x/c6x.opt: New file.
* config/c6x/c6x-tables.opt: New file.
* config/c6x/c6x-opts.h: New file.
* config/c6x/c6x-isas.def: New file.
* config/c6x/elf.h: New file.
* config/c6x/elf-common.h: New file.
* config/c6x/uclinux-elf.h: New file.
* config/c6x/t-c6x: New file.
* config/c6x/t-c6x-elf: New file.
* config/c6x/t-c6x-uclinux: New file.
* config/c6x/t-c6x-softfp: New file.
* config/c6x/gtd.c: New file.
* config/c6x/gtf.c: New file.
* config/c6x/ltd.c: New file.
* config/c6x/ltf.c: New file.
* config/c6x/ged.c: New file.
* config/c6x/gef.c: New file.
* config/c6x/led.c: New file.
* config/c6x/lef.c: New file.
* config/c6x/eqd.c: New file.
* config/c6x/eqf.c: New file.
* config/c6x/libgcc-c6xeabi.ver: New file.
contrib/
* gcc_update: Add C6X generated files.
* contrib/config-list.mk: Add c6x-elf and c6x-uclinux.
libgcc/
* config.host: Handle tic6x-*-*.
* config/c6x/c6x-abi.h: New file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@176308 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/c6x/c6x-sched.md.in')
-rw-r--r-- | gcc/config/c6x/c6x-sched.md.in | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/gcc/config/c6x/c6x-sched.md.in b/gcc/config/c6x/c6x-sched.md.in new file mode 100644 index 00000000000..271109b9cf5 --- /dev/null +++ b/gcc/config/c6x/c6x-sched.md.in @@ -0,0 +1,230 @@ +;; Scheduling description for TI C6X. +;; Copyright (C) 2010, 2011 Free Software Foundation, Inc. +;; Contributed by Bernd Schmidt <bernds@codesourcery.com> +;; Contributed by CodeSourcery. +;; +;; This file is part of GCC. +;; +;; GCC is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. +;; +;; GCC is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. +;; +;; You should have received a copy of the GNU General Public License +;; along with GCC; see the file COPYING3. If not see +;; <http://www.gnu.org/licenses/>. + +;; Input file for gensched.sh We process this file multiple times, +;; replacing _N_ with either 1 or 2 for each of the sides of the +;; machine, and _RF_ correspondingly with "a" or "b". _CROSS_ and +;; _CUNIT_ are replaced with yes/no and the appropriate reservation. + +(define_insn_reservation "load_d_N__CROSS_" 5 + (and (eq_attr "type" "load") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "d_addr") + (eq_attr "addr_regfile" "_RF_")))) + "d_N_+t_NX_") + +(define_insn_reservation "store_d_N__CROSS_" 1 + (and (eq_attr "type" "store") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "d_addr") + (eq_attr "addr_regfile" "_RF_")))) + "d_N_+t_NX_") + +(define_insn_reservation "loadn_d_N__CROSS_" 5 + (and (eq_attr "type" "loadn") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "d_addr") + (eq_attr "addr_regfile" "_RF_")))) + "d_N_+t1+t2") + +(define_insn_reservation "storen_d_N__CROSS_" 1 + (and (eq_attr "type" "storen") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "d_addr") + (eq_attr "addr_regfile" "_RF_")))) + "d_N_+t1+t2") + +(define_insn_reservation "single_d_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "d") + (eq_attr "dest_regfile" "_RF_")))) + "d_N__CUNIT_") + +(define_insn_reservation "single_l_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "l") + (eq_attr "dest_regfile" "_RF_")))) + "l_N_+l_N_w_CUNIT_") + +(define_insn_reservation "fp4_l_N__CROSS_" 4 + (and (eq_attr "type" "fp4") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "l") + (eq_attr "dest_regfile" "_RF_")))) + "l_N__CUNIT_,nothing*2,l_N_w") + +(define_insn_reservation "intdp_l_N__CROSS_" 5 + (and (eq_attr "type" "intdp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "l") + (eq_attr "dest_regfile" "_RF_")))) + "l_N__CUNIT_,nothing*2,l_N_w*2") + +(define_insn_reservation "adddp_l_N__CROSS_" 7 + (and (eq_attr "type" "adddp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "l") + (eq_attr "dest_regfile" "_RF_")))) + "(l_N__CUNIT_)*2,nothing*3,l_N_w*2") + +(define_insn_reservation "branch_s_N__CROSS_" 6 + (and (eq_attr "type" "branch") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_")))) + "(s_N_+s_N_w)_CUNIT_+br1") + +(define_insn_reservation "call_addkpc_s_N__CROSS_" 6 + (and (eq_attr "type" "call") + (and (ne (symbol_ref "TARGET_INSNS_64") (const_int 0)) + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_"))))) + "(s_N_+s_N_w)_CUNIT_+br1,s2+br0+br1") + +(define_insn_reservation "call_mvk_s_N__CROSS_" 6 + (and (eq_attr "type" "call") + (and (eq (symbol_ref "TARGET_INSNS_64") (const_int 0)) + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_"))))) + "(s_N_+s_N_w)_CUNIT_+br1,s2,s2") + +(define_insn_reservation "single_s_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_")))) + "(s_N_+s_N_w)_CUNIT_") + +(define_insn_reservation "cmpdp_s_N__CROSS_" 2 + (and (eq_attr "type" "cmpdp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_")))) + "s_N__CUNIT_,(s_N__CUNIT_)+s_N_w") + +(define_insn_reservation "dp2_s_N__CROSS_" 2 + (and (eq_attr "type" "dp2") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_")))) + "s_N_+s_N_w_CUNIT_,s_N_w") + +(define_insn_reservation "fp4_s_N__CROSS_" 4 + (and (eq_attr "type" "fp4") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_")))) + "s_N__CUNIT_,nothing*2,s_N_w") + +(define_insn_reservation "mvilc4_s_N__CROSS_" 4 + (and (eq_attr "type" "mvilc") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "s") + (eq_attr "dest_regfile" "_RF_")))) + "(s_N_+s_N_w)_CUNIT_") + +(define_insn_reservation "single_dl_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "dl") + (eq_attr "dest_regfile" "_RF_")))) + "(d_N_|(l_N_+l_N_w))_CUNIT_") + +(define_insn_reservation "single_ds_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "ds") + (eq_attr "dest_regfile" "_RF_")))) + "(d_N_|(s_N_+s_N_w))_CUNIT_") + +(define_insn_reservation "single_ls_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "ls") + (eq_attr "dest_regfile" "_RF_")))) + "((l_N_+l_N_w)|(s_N_+s_N_w))_CUNIT_") + +(define_insn_reservation "dp2_l_N__CROSS_" 2 + (and (eq_attr "type" "dp2") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "l") + (eq_attr "dest_regfile" "_RF_")))) + "l_N_+l_N_w_CUNIT_,l_N_w") + +(define_insn_reservation "fp4_ls_N__CROSS_" 4 + (and (eq_attr "type" "fp4") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "ls") + (eq_attr "dest_regfile" "_RF_")))) + "(s_N__CUNIT_,nothing*2,s_N_w)|(l_N__CUNIT_,nothing*2,l_N_w)") + +(define_insn_reservation "adddp_ls_N__CROSS_" 7 + (and (eq_attr "type" "adddp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "ls") + (eq_attr "dest_regfile" "_RF_")))) + "((s_N__CUNIT_)*2,nothing*3,s_N_w*2)|((l_N__CUNIT_)*2,nothing*3,l_N_w*2)") + +(define_insn_reservation "single_dls_N__CROSS_" 1 + (and (eq_attr "type" "single") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "dls") + (eq_attr "dest_regfile" "_RF_")))) + "(d_N_|(l_N_+l_N_w)|(s_N_+s_N_w))_CUNIT_") + +(define_insn_reservation "mpy2_m_N__CROSS_" 2 + (and (eq_attr "type" "mpy2") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "m") + (eq_attr "dest_regfile" "_RF_")))) + "m_N__CUNIT_,m_N_w") + +(define_insn_reservation "mpy4_m_N__CROSS_" 4 + (and (eq_attr "type" "mpy4") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "m") + (eq_attr "dest_regfile" "_RF_")))) + "m_N__CUNIT_,nothing,nothing,m_N_w") + +(define_insn_reservation "mpydp_m_N__CROSS_" 10 + (and (eq_attr "type" "mpydp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "m") + (eq_attr "dest_regfile" "_RF_")))) + "(m_N__CUNIT_)*4,nothing*4,m_N_w*2") + +(define_insn_reservation "mpyspdp_m_N__CROSS_" 7 + (and (eq_attr "type" "mpyspdp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "m") + (eq_attr "dest_regfile" "_RF_")))) + "(m_N__CUNIT_)*2,nothing*3,m_N_w*2") + +(define_insn_reservation "mpysp2dp_m_N__CROSS_" 5 + (and (eq_attr "type" "mpysp2dp") + (and (eq_attr "cross" "_CROSS_") + (and (eq_attr "units" "m") + (eq_attr "dest_regfile" "_RF_")))) + "m_N__CUNIT_,nothing*2,m_N_w*2") |