* update gcc to 14.2.1+r134+gab884fffe3fc-2.1

This commit is contained in:
Alexander Baldeck 2024-10-08 11:02:07 +02:00
parent 5d833b48d3
commit 9c37547fd7
2 changed files with 444 additions and 1 deletions

View File

@ -89,7 +89,8 @@ prepare() {
patch -Np1 < "$srcdir/unfilter-default-library-path.patch"
echo ${CFLAGS} | grep "mcpu=espresso" &>/dev/null && patch -Np1 < "$srcdir/gcc-14.2.1-espresso-cpu.patch"
# add WiiU Espresso CPU bug work around
#echo ${CFLAGS} | grep "mcpu=espresso" &>/dev/null && patch -Np1 < "$srcdir/gcc-14.2.1-espresso-cpu.patch"
mkdir -p "$srcdir/gcc-build"
mkdir -p "$srcdir/libgccjit-build"

View File

@ -0,0 +1,442 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a3566f5c77d..9b06ac3be06 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -5606,7 +5606,7 @@ case "${target}" in
| rs64 \
| 401 | 403 | 405 | 405fp | 440 | 440fp | 464 | 464fp \
| 476 | 476fp | 505 | 601 | 602 | 603 | 603e | ec603e \
- | 604 | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 \
+ | 604 | 604e | 620 | 630 | 740 | 750 | 7400 | 7450 | espresso \
| a2 | e300c[23] | 854[08] | e500mc | e500mc64 | e5500 | e6500 \
| titan | 801 | 821 | 823 | 860 | 970 | G3 | G4 | G5 | cell)
# OK
diff --git a/gcc/config/rs6000/7xx.md b/gcc/config/rs6000/7xx.md
index c7512beab3e..1553f46a094 100644
--- a/gcc/config/rs6000/7xx.md
+++ b/gcc/config/rs6000/7xx.md
@@ -47,79 +47,79 @@
(define_insn_reservation "ppc750-load" 2
(and (eq_attr "type" "load,fpload,vecload,load_l")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,lsu_7xx")
(define_insn_reservation "ppc750-store" 2
(and (eq_attr "type" "store,fpstore,vecstore")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,lsu_7xx")
(define_insn_reservation "ppc750-storec" 8
(and (eq_attr "type" "store_c")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,lsu_7xx")
(define_insn_reservation "ppc750-integer" 1
(and (ior (eq_attr "type" "integer,insert,trap,cntlz,isel")
(and (eq_attr "type" "add,logical,shift,exts")
(eq_attr "dot" "no")))
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx|iu2_7xx")
(define_insn_reservation "ppc750-two" 1
(and (eq_attr "type" "two")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx|iu2_7xx,iu1_7xx|iu2_7xx")
(define_insn_reservation "ppc750-three" 1
(and (eq_attr "type" "three")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx|iu2_7xx,iu1_7xx|iu2_7xx,iu1_7xx|iu2_7xx")
(define_insn_reservation "ppc750-imul" 4
(and (eq_attr "type" "mul")
(eq_attr "size" "32")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx*4")
(define_insn_reservation "ppc750-imul2" 3
(and (eq_attr "type" "mul")
(eq_attr "size" "16")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx*2")
(define_insn_reservation "ppc750-imul3" 2
(and (eq_attr "type" "mul")
(eq_attr "size" "8")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx")
(define_insn_reservation "ppc750-idiv" 19
(and (eq_attr "type" "div")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx*19")
(define_insn_reservation "ppc750-compare" 2
(and (ior (eq_attr "type" "cmp")
(and (eq_attr "type" "add,logical,shift,exts")
(eq_attr "dot" "yes")))
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,(iu1_7xx|iu2_7xx)")
(define_insn_reservation "ppc750-fpcompare" 2
(and (eq_attr "type" "fpcompare")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,fpu_7xx")
(define_insn_reservation "ppc750-fp" 3
(and (eq_attr "type" "fp,fpsimple")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,fpu_7xx")
(define_insn_reservation "ppc750-dmul" 4
(and (eq_attr "type" "dmul")
- (eq_attr "cpu" "ppc750"))
+ (eq_attr "cpu" "ppc750,espresso"))
"ppc750_du,fpu_7xx*2")
(define_insn_reservation "ppc7400-dmul" 3
@@ -130,37 +130,37 @@
; Divides are not pipelined
(define_insn_reservation "ppc750-sdiv" 17
(and (eq_attr "type" "sdiv")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,fpu_7xx*17")
(define_insn_reservation "ppc750-ddiv" 31
(and (eq_attr "type" "ddiv")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,fpu_7xx*31")
(define_insn_reservation "ppc750-mfcr" 2
(and (eq_attr "type" "mfcr,mtcr")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"ppc750_du,iu1_7xx")
(define_insn_reservation "ppc750-crlogical" 3
(and (eq_attr "type" "cr_logical")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"nothing,sru_7xx*2")
(define_insn_reservation "ppc750-mtjmpr" 2
(and (eq_attr "type" "mtjmpr,isync,sync")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"nothing,sru_7xx*2")
(define_insn_reservation "ppc750-mfjmpr" 3
(and (eq_attr "type" "mfjmpr")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"nothing,sru_7xx*2")
(define_insn_reservation "ppc750-jmpreg" 1
(and (eq_attr "type" "jmpreg,branch,isync")
- (eq_attr "cpu" "ppc750,ppc7400"))
+ (eq_attr "cpu" "ppc750,ppc7400,espresso"))
"nothing,bpu_7xx")
;; Altivec
diff --git a/gcc/config/rs6000/driver-rs6000.cc b/gcc/config/rs6000/driver-rs6000.cc
index f4900724b98..617a4f8d6f2 100644
--- a/gcc/config/rs6000/driver-rs6000.cc
+++ b/gcc/config/rs6000/driver-rs6000.cc
@@ -508,6 +508,7 @@ static const struct asm_name asm_names[] = {
{ "630", "-mppc64" },
{ "740", "-mppc" },
{ "750", "-mppc" },
+ { "espresso", "-mppc" },
{ "G3", "-mppc" },
{ "7400", "-mppc %{!mvsx:%{!maltivec:-maltivec}}" },
{ "7450", "-mppc %{!mvsx:%{!maltivec:-maltivec}}" },
diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 68519e1397f..82aa147d308 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -649,6 +649,8 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
/* Used by lwarx/stwcx. errata work-around. */
if (rs6000_cpu == PROCESSOR_PPC405)
builtin_define ("__PPC405__");
+ if (rs6000_cpu == PROCESSOR_ESPRESSO)
+ builtin_define ("__ESPRESSO__");
/* Used by libstdc++. */
if (TARGET_NO_LWSYNC)
builtin_define ("__NO_LWSYNC__");
diff --git a/gcc/config/rs6000/rs6000-cpus.def b/gcc/config/rs6000/rs6000-cpus.def
index 84fac8bdac1..a79d15a415a 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -203,6 +203,7 @@ RS6000_CPU ("740", PROCESSOR_PPC750, OPTION_MASK_PPC_GFXOPT)
RS6000_CPU ("7400", PROCESSOR_PPC7400, POWERPC_7400_MASK)
RS6000_CPU ("7450", PROCESSOR_PPC7450, POWERPC_7400_MASK)
RS6000_CPU ("750", PROCESSOR_PPC750, OPTION_MASK_PPC_GFXOPT)
+RS6000_CPU ("espresso", PROCESSOR_ESPRESSO, OPTION_MASK_PPC_GFXOPT)
RS6000_CPU ("801", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
RS6000_CPU ("821", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
RS6000_CPU ("823", PROCESSOR_MPCCORE, OPTION_MASK_SOFT_FLOAT)
diff --git a/gcc/config/rs6000/rs6000-logue.cc b/gcc/config/rs6000/rs6000-logue.cc
index edc0d6c8f52..f70ca4e1bba 100644
--- a/gcc/config/rs6000/rs6000-logue.cc
+++ b/gcc/config/rs6000/rs6000-logue.cc
@@ -4313,6 +4313,7 @@ rs6000_emit_epilogue (enum epilogue_type epilogue_type)
bool using_mtcr_multiple = (rs6000_tune == PROCESSOR_PPC601
|| rs6000_tune == PROCESSOR_PPC603
|| rs6000_tune == PROCESSOR_PPC750
+ || rs6000_tune == PROCESSOR_ESPRESSO
|| optimize_size);
/* Restore via the backchain when we have a large frame, since this
diff --git a/gcc/config/rs6000/rs6000-opts.h b/gcc/config/rs6000/rs6000-opts.h
index 88e357835a5..b92f9b0780d 100644
--- a/gcc/config/rs6000/rs6000-opts.h
+++ b/gcc/config/rs6000/rs6000-opts.h
@@ -40,6 +40,7 @@ enum processor_type
PROCESSOR_PPC750,
PROCESSOR_PPC7400,
PROCESSOR_PPC7450,
+ PROCESSOR_ESPRESSO,
PROCESSOR_PPC403,
PROCESSOR_PPC405,
diff --git a/gcc/config/rs6000/rs6000-tables.opt b/gcc/config/rs6000/rs6000-tables.opt
index a5649fef1ec..c44ddff735a 100644
--- a/gcc/config/rs6000/rs6000-tables.opt
+++ b/gcc/config/rs6000/rs6000-tables.opt
@@ -96,97 +96,97 @@ EnumValue
Enum(rs6000_cpu_opt_value) String(750) Value(22)
EnumValue
-Enum(rs6000_cpu_opt_value) String(801) Value(23)
+Enum(rs6000_cpu_opt_value) String(espresso) Value(23)
EnumValue
-Enum(rs6000_cpu_opt_value) String(821) Value(24)
+Enum(rs6000_cpu_opt_value) String(801) Value(24)
EnumValue
-Enum(rs6000_cpu_opt_value) String(823) Value(25)
+Enum(rs6000_cpu_opt_value) String(821) Value(25)
EnumValue
-Enum(rs6000_cpu_opt_value) String(8540) Value(26)
+Enum(rs6000_cpu_opt_value) String(823) Value(26)
EnumValue
-Enum(rs6000_cpu_opt_value) String(8548) Value(27)
+Enum(rs6000_cpu_opt_value) String(8540) Value(27)
EnumValue
-Enum(rs6000_cpu_opt_value) String(a2) Value(28)
+Enum(rs6000_cpu_opt_value) String(8548) Value(28)
EnumValue
-Enum(rs6000_cpu_opt_value) String(e300c2) Value(29)
+Enum(rs6000_cpu_opt_value) String(a2) Value(29)
EnumValue
-Enum(rs6000_cpu_opt_value) String(e300c3) Value(30)
+Enum(rs6000_cpu_opt_value) String(e300c2) Value(30)
EnumValue
-Enum(rs6000_cpu_opt_value) String(e500mc) Value(31)
+Enum(rs6000_cpu_opt_value) String(e300c3) Value(31)
EnumValue
-Enum(rs6000_cpu_opt_value) String(e500mc64) Value(32)
+Enum(rs6000_cpu_opt_value) String(e500mc) Value(32)
EnumValue
-Enum(rs6000_cpu_opt_value) String(e5500) Value(33)
+Enum(rs6000_cpu_opt_value) String(e5500mc64) Value(33)
EnumValue
-Enum(rs6000_cpu_opt_value) String(e6500) Value(34)
+Enum(rs6000_cpu_opt_value) String(e5500) Value(34)
EnumValue
-Enum(rs6000_cpu_opt_value) String(860) Value(35)
+Enum(rs6000_cpu_opt_value) String(e6500) Value(35)
EnumValue
-Enum(rs6000_cpu_opt_value) String(970) Value(36)
+Enum(rs6000_cpu_opt_value) String(860) Value(36)
EnumValue
-Enum(rs6000_cpu_opt_value) String(cell) Value(37)
+Enum(rs6000_cpu_opt_value) String(970) Value(37)
EnumValue
-Enum(rs6000_cpu_opt_value) String(ec603e) Value(38)
+Enum(rs6000_cpu_opt_value) String(cell) Value(38)
EnumValue
-Enum(rs6000_cpu_opt_value) String(G3) Value(39)
+Enum(rs6000_cpu_opt_value) String(ec603e) Value(39)
EnumValue
-Enum(rs6000_cpu_opt_value) String(G4) Value(40)
+Enum(rs6000_cpu_opt_value) String(G3) Value(40)
EnumValue
-Enum(rs6000_cpu_opt_value) String(G5) Value(41)
+Enum(rs6000_cpu_opt_value) String(G4) Value(41)
EnumValue
-Enum(rs6000_cpu_opt_value) String(titan) Value(42)
+Enum(rs6000_cpu_opt_value) String(G5) Value(42)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power3) Value(43)
+Enum(rs6000_cpu_opt_value) String(titan) Value(43)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power4) Value(44)
+Enum(rs6000_cpu_opt_value) String(power3) Value(44)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power5) Value(45)
+Enum(rs6000_cpu_opt_value) String(power4) Value(45)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power5+) Value(46)
+Enum(rs6000_cpu_opt_value) String(power5) Value(46)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power6) Value(47)
+Enum(rs6000_cpu_opt_value) String(power5+) Value(47)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power6x) Value(48)
+Enum(rs6000_cpu_opt_value) String(power6) Value(48)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power7) Value(49)
+Enum(rs6000_cpu_opt_value) String(power6x) Value(49)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power8) Value(50)
+Enum(rs6000_cpu_opt_value) String(power7) Value(50)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power9) Value(51)
+Enum(rs6000_cpu_opt_value) String(power8) Value(51)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power10) Value(52)
+Enum(rs6000_cpu_opt_value) String(power9) Value(52)
EnumValue
-Enum(rs6000_cpu_opt_value) String(power11) Value(53)
+Enum(rs6000_cpu_opt_value) String(power10) Value(53)
EnumValue
Enum(rs6000_cpu_opt_value) String(powerpc) Value(54)
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 5fd31bf8242..b1b6674f2f6 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -4656,6 +4656,7 @@ rs6000_option_override_internal (bool global_init_p)
case PROCESSOR_PPC750:
case PROCESSOR_PPC7400:
+ case PROCESSOR_ESPRESSO:
rs6000_cost = &ppc750_cost;
break;
@@ -16830,6 +16831,10 @@ emit_store_conditional (machine_mode mode, rtx res, rtx mem, rtx val)
if (PPC405_ERRATUM77)
emit_insn (gen_hwsync ());
+ /* Emit dcbst before stwcx. to address Espresso erratum */
+ if (ESPRESSO_ERRATUM)
+ emit_insn (gen_rs6000_dcbst (mem));
+
emit_insn (fn (res, mem, val));
}
@@ -18250,6 +18255,7 @@ rs6000_adjust_cost (rtx_insn *insn, int dep_type, rtx_insn *dep_insn, int cost,
|| rs6000_tune == PROCESSOR_PPC620
|| rs6000_tune == PROCESSOR_PPC630
|| rs6000_tune == PROCESSOR_PPC750
+ || rs6000_tune == PROCESSOR_ESPRESSO
|| rs6000_tune == PROCESSOR_PPC7400
|| rs6000_tune == PROCESSOR_PPC7450
|| rs6000_tune == PROCESSOR_PPCE5500
@@ -18807,6 +18813,7 @@ rs6000_issue_rate (void)
case PROCESSOR_PPC440:
case PROCESSOR_PPC603:
case PROCESSOR_PPC750:
+ case PROCESSOR_ESPRESSO:
case PROCESSOR_PPC7400:
case PROCESSOR_PPC8540:
case PROCESSOR_PPC8548:
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 197922fbb84..43772bdbc98 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -77,6 +77,9 @@
#define PPC405_ERRATUM77 0
#endif
+/* Support Espresso stwcx erratum. */
+#define ESPRESSO_ERRATUM (rs6000_cpu == PROCESSOR_ESPRESSO)
+
#ifndef SUBTARGET_DRIVER_SELF_SPECS
# define SUBTARGET_DRIVER_SELF_SPECS ""
#endif
@@ -144,6 +147,7 @@
mcpu=630: -mppc64; \
mcpu=740: -mppc; \
mcpu=750: -mppc; \
+ mcpu=espresso: -mppc; \
mcpu=G3: -mppc; \
mcpu=7400: -mppc %{!mvsx:%{!maltivec:-maltivec}}; \
mcpu=7450: -mppc %{!mvsx:%{!maltivec:-maltivec}}; \
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 74b87f926d7..c93a828073f 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -347,7 +347,7 @@
;; enumeration in rs6000-opts.h.
(define_attr "cpu"
"ppc601,ppc603,ppc604,ppc604e,ppc620,ppc630,
- ppc750,ppc7400,ppc7450,
+ ppc750,ppc7400,ppc7450,espresso,
ppc403,ppc405,ppc440,ppc476,
ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,ppce5500,ppce6500,
power4,power5,power6,power7,power8,power9,power10,power11,
diff --git a/gcc/config/rs6000/sync.md b/gcc/config/rs6000/sync.md
index 425eff855d2..6dce7d8b327 100644
--- a/gcc/config/rs6000/sync.md
+++ b/gcc/config/rs6000/sync.md
@@ -347,6 +347,13 @@
"<stcx> %2,%y1"
[(set_attr "type" "store_c")])
+;; I am pretty sure VOID is correct since this actually affects a cache-block sized
+;; chunk of memory
+ (define_insn "rs6000_dcbst"
+ [(match_operand:VOID 0 "memory_operand" "=Z")]
+ ""
+ "dcbst %y0")
+
;; Use a temporary register to force getting an even register for the
;; lqarx/stqcrx. instructions. Normal optimizations will eliminate this extra
;; copy on big endian systems.