240 lines
8.0 KiB
Diff
240 lines
8.0 KiB
Diff
|
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
|