123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- diff -Naurb gcc-4.4.2.ori/gcc/config/sparc/leon.md gcc-4.4.2/gcc/config/sparc/leon.md
- --- gcc-4.4.2.ori/gcc/config/sparc/leon.md 1970-01-01 01:00:00.000000000 +0100
- +++ gcc-4.4.2/gcc/config/sparc/leon.md 2010-10-19 11:56:58.000000000 +0200
- @@ -0,0 +1,56 @@
- +;; Scheduling description for Leon.
- +;; Copyright (C) 2010 Free Software Foundation, Inc.
- +;;
- +;; 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/>.
- +
- +
- +(define_automaton "leon")
- +
- +(define_cpu_unit "leon_memory, leon_fpalu" "leon")
- +(define_cpu_unit "leon_fpmds" "leon")
- +(define_cpu_unit "write_buf" "leon")
- +
- +(define_insn_reservation "leon_load" 1
- + (and (eq_attr "cpu" "leon")
- + (eq_attr "type" "load,sload,fpload"))
- + "leon_memory")
- +
- +(define_insn_reservation "leon_store" 1
- + (and (eq_attr "cpu" "leon")
- + (eq_attr "type" "store,fpstore"))
- + "leon_memory+write_buf")
- +
- +(define_insn_reservation "leon_fp_alu" 1
- + (and (eq_attr "cpu" "leon")
- + (eq_attr "type" "fp,fpmove"))
- + "leon_fpalu, nothing")
- +
- +(define_insn_reservation "leon_fp_mult" 1
- + (and (eq_attr "cpu" "leon")
- + (eq_attr "type" "fpmul"))
- + "leon_fpmds, nothing")
- +
- +(define_insn_reservation "leon_fp_div" 16
- + (and (eq_attr "cpu" "leon")
- + (eq_attr "type" "fpdivs,fpdivd"))
- + "leon_fpmds, nothing*15")
- +
- +(define_insn_reservation "leon_fp_sqrt" 23
- + (and (eq_attr "cpu" "leon")
- + (eq_attr "type" "fpsqrts,fpsqrtd"))
- + "leon_fpmds, nothing*21")
- +
- diff -Naurb gcc-4.4.2.ori/gcc/config/sparc/sparc.c gcc-4.4.2/gcc/config/sparc/sparc.c
- --- gcc-4.4.2.ori/gcc/config/sparc/sparc.c 2010-10-19 11:55:17.000000000 +0200
- +++ gcc-4.4.2/gcc/config/sparc/sparc.c 2010-10-19 11:56:58.000000000 +0200
- @@ -246,6 +246,30 @@
- 0, /* shift penalty */
- };
-
- +static const
- +struct processor_costs leon_costs = {
- + COSTS_N_INSNS (1), /* int load */
- + COSTS_N_INSNS (1), /* int signed load */
- + COSTS_N_INSNS (1), /* int zeroed load */
- + COSTS_N_INSNS (1), /* float load */
- + COSTS_N_INSNS (1), /* fmov, fneg, fabs */
- + COSTS_N_INSNS (1), /* fadd, fsub */
- + COSTS_N_INSNS (1), /* fcmp */
- + COSTS_N_INSNS (1), /* fmov, fmovr */
- + COSTS_N_INSNS (1), /* fmul */
- + COSTS_N_INSNS (15), /* fdivs */
- + COSTS_N_INSNS (15), /* fdivd */
- + COSTS_N_INSNS (23), /* fsqrts */
- + COSTS_N_INSNS (23), /* fsqrtd */
- + COSTS_N_INSNS (5), /* imul */
- + COSTS_N_INSNS (5), /* imulX */
- + 0, /* imul bit factor */
- + COSTS_N_INSNS (5), /* idiv */
- + COSTS_N_INSNS (5), /* idivX */
- + COSTS_N_INSNS (1), /* movcc/movr */
- + 0, /* shift penalty */
- +};
- +
- const struct processor_costs *sparc_costs = &cypress_costs;
-
- #ifdef HAVE_AS_RELAX_OPTION
- @@ -651,6 +675,10 @@
- { TARGET_CPU_ultrasparc3, "ultrasparc3" },
- { TARGET_CPU_niagara, "niagara" },
- { TARGET_CPU_niagara2, "niagara2" },
- + { TARGET_CPU_sparchfleon, "sparchfleon" },
- + { TARGET_CPU_sparchfleonv8, "sparchfleonv8" },
- + { TARGET_CPU_sparcsfleon, "sparcsfleon" },
- + { TARGET_CPU_sparcsfleonv8, "sparcsfleonv8" },
- { 0, 0 }
- };
- const struct cpu_default *def;
- @@ -689,6 +717,11 @@
- /* UltraSPARC T1 */
- { "niagara", PROCESSOR_NIAGARA, MASK_ISA, MASK_V9|MASK_DEPRECATED_V8_INSNS},
- { "niagara2", PROCESSOR_NIAGARA, MASK_ISA, MASK_V9},
- + /* SPARC-LEON */
- + { "sparchfleon", PROCESSOR_LEON, MASK_ISA, MASK_FPU },
- + { "sparchfleonv8", PROCESSOR_LEON, MASK_ISA & ~(MASK_V8), MASK_V8|MASK_FPU },
- + { "sparcsfleon", PROCESSOR_LEON, MASK_ISA | MASK_FPU, 0 },
- + { "sparcsfleonv8", PROCESSOR_LEON, (MASK_ISA | MASK_FPU) & ~(MASK_V8), MASK_V8 },
- { 0, 0, 0, 0 }
- };
- const struct cpu_table *cpu;
- @@ -855,6 +888,9 @@
- case PROCESSOR_NIAGARA2:
- sparc_costs = &niagara2_costs;
- break;
- + case PROCESSOR_LEON:
- + sparc_costs = &leon_costs;
- + break;
- };
-
- #ifdef TARGET_DEFAULT_LONG_DOUBLE_128
- diff -Naurb gcc-4.4.2.ori/gcc/config/sparc/sparc.h gcc-4.4.2/gcc/config/sparc/sparc.h
- --- gcc-4.4.2.ori/gcc/config/sparc/sparc.h 2010-10-19 11:55:17.000000000 +0200
- +++ gcc-4.4.2/gcc/config/sparc/sparc.h 2010-10-19 11:56:58.000000000 +0200
- @@ -243,6 +243,10 @@
- #define TARGET_CPU_ultrasparc3 9
- #define TARGET_CPU_niagara 10
- #define TARGET_CPU_niagara2 11
- +#define TARGET_CPU_sparchfleon 12
- +#define TARGET_CPU_sparchfleonv8 13
- +#define TARGET_CPU_sparcsfleon 14
- +#define TARGET_CPU_sparcsfleonv8 15
-
- #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
- || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
- @@ -299,6 +303,26 @@
- #define ASM_CPU32_DEFAULT_SPEC "-Asparclite"
- #endif
-
- +#if TARGET_CPU_DEFAULT == TARGET_CPU_sparchfleon
- +#define CPP_CPU32_DEFAULT_SPEC "-Dsparcleon"
- +#define ASM_CPU32_DEFAULT_SPEC ""
- +#endif
- +
- +#if TARGET_CPU_DEFAULT == TARGET_CPU_sparcsfleon
- +#define CPP_CPU32_DEFAULT_SPEC "-Dsparcleon -D_SOFT_FLOAT"
- +#define ASM_CPU32_DEFAULT_SPEC ""
- +#endif
- +
- +#if TARGET_CPU_DEFAULT == TARGET_CPU_sparchfleonv8
- +#define CPP_CPU32_DEFAULT_SPEC "-Dsparcleon -D__sparc_v8__ "
- +#define ASM_CPU32_DEFAULT_SPEC ""
- +#endif
- +
- +#if TARGET_CPU_DEFAULT == TARGET_CPU_sparcsfleonv8
- +#define CPP_CPU32_DEFAULT_SPEC "-Dsparcleon -D__sparc_v8__ -D_SOFT_FLOAT"
- +#define ASM_CPU32_DEFAULT_SPEC ""
- +#endif
- +
- #if TARGET_CPU_DEFAULT == TARGET_CPU_supersparc
- #define CPP_CPU32_DEFAULT_SPEC "-D__supersparc__ -D__sparc_v8__"
- #define ASM_CPU32_DEFAULT_SPEC ""
- @@ -369,6 +393,10 @@
- %{mcpu=ultrasparc3:-D__sparc_v9__} \
- %{mcpu=niagara:-D__sparc_v9__} \
- %{mcpu=niagara2:-D__sparc_v9__} \
- +%{mcpu=sparchfleon:-Dsparcleon} \
- +%{mcpu=sparchfleonv8:-Dsparcleon -D__sparc_v8__} \
- +%{mcpu=sparcsfleon:-Dsparcleon -D_SOFT_FLOAT} \
- +%{mcpu=sparcsfleonv8:-Dsparcleon -D_SOFT_FLOAT -D__sparc_v8__} \
- %{!mcpu*:%{!mcypress:%{!msparclite:%{!mf930:%{!mf934:%{!mv8:%{!msupersparc:%(cpp_cpu_default)}}}}}}} \
- "
- #define CPP_ARCH32_SPEC ""
- @@ -533,6 +561,7 @@
- PROCESSOR_V7,
- PROCESSOR_CYPRESS,
- PROCESSOR_V8,
- + PROCESSOR_LEON,
- PROCESSOR_SUPERSPARC,
- PROCESSOR_SPARCLITE,
- PROCESSOR_F930,
- diff -Naurb gcc-4.4.2.ori/gcc/config/sparc/sparc.md gcc-4.4.2/gcc/config/sparc/sparc.md
- --- gcc-4.4.2.ori/gcc/config/sparc/sparc.md 2010-10-19 11:55:17.000000000 +0200
- +++ gcc-4.4.2/gcc/config/sparc/sparc.md 2010-10-19 11:56:58.000000000 +0200
- @@ -89,6 +89,7 @@
- "v7,
- cypress,
- v8,
- + leon,
- supersparc,
- sparclite,f930,f934,
- hypersparc,sparclite86x,
- @@ -320,6 +321,7 @@
- (include "ultra3.md")
- (include "niagara.md")
- (include "niagara2.md")
- +(include "leon.md")
-
-
- ;; Operand and operator predicates and constraints
- diff -Naurb gcc-4.4.2.ori/gcc/config/sparc/t-leon gcc-4.4.2/gcc/config/sparc/t-leon
- --- gcc-4.4.2.ori/gcc/config/sparc/t-leon 1970-01-01 01:00:00.000000000 +0100
- +++ gcc-4.4.2/gcc/config/sparc/t-leon 2010-10-19 11:56:58.000000000 +0200
- @@ -0,0 +1,16 @@
- +# configuration file for LEON cpu
- +
- +LIB1ASMSRC = sparc/lb1spc.asm
- +LIB1ASMFUNCS = _mulsi3 _divsi3 _modsi3
- +
- +# We want fine grained libraries, so use the new code to build the
- +# floating point emulation libraries.
- +FPBIT = fp-bit.c
- +DPBIT = dp-bit.c
- +
- +dp-bit.c: $(srcdir)/config/fp-bit.c
- + cat $(srcdir)/config/fp-bit.c > dp-bit.c
- +
- +fp-bit.c: $(srcdir)/config/fp-bit.c
- + echo '#define FLOAT' > fp-bit.c
- + cat $(srcdir)/config/fp-bit.c >> fp-bit.c
- diff -Naurb gcc-4.4.2.ori/gcc/config.gcc gcc-4.4.2/gcc/config.gcc
- --- gcc-4.4.2.ori/gcc/config.gcc 2010-10-19 11:55:17.000000000 +0200
- +++ gcc-4.4.2/gcc/config.gcc 2010-10-19 11:56:11.000000000 +0200
- @@ -2978,6 +2978,9 @@
- | v9 | ultrasparc | ultrasparc3 | niagara | niagara2)
- # OK
- ;;
- + sparchfleon | sparcsfleon | sparchfleonv8 | sparcsfleonv8 | leon)
- + tmake_file="${tmake_file} sparc/t-leon"
- + ;;
- *)
- echo "Unknown cpu used in --with-$which=$val" 1>&2
- exit 1
|