From 047a63250978f8513810438f95f8131247b63a03 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Fri, 5 Jul 2024 20:48:28 +0200 Subject: [PATCH] bump to 14.1.0 and use soft-fp instead of fp-bit in libgcc --- configure.sh | 3 + giteapc.make | 2 +- patches/gcc-14.1.0-libgcc-use-soft-fp.patch | 97 +++++++++++++++++++++ 3 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 patches/gcc-14.1.0-libgcc-use-soft-fp.patch diff --git a/configure.sh b/configure.sh index 2b41799..b49ef16 100755 --- a/configure.sh +++ b/configure.sh @@ -96,6 +96,9 @@ else if [[ "$VERSION" = "11.1.0" ]]; then echo "$TAG Applying patches/gcc-11.1.0-libstdc++-v3-skip-dlopen.patch..." patch -u -N -p0 < patches/gcc-11.1.0-libstdc++-v3-skip-dlopen.patch + elif [[ "$VERSION" = "14.1.0" ]]; then + echo "$TAG Applying patches/gcc-14.1.0-libgcc-use-soft-fp.patch..." + patch -u -N -p0 < patches/gcc-14.1.0-libgcc-use-soft-fp.patch fi fi diff --git a/giteapc.make b/giteapc.make index 1f49a4b..da6748c 100644 --- a/giteapc.make +++ b/giteapc.make @@ -2,7 +2,7 @@ # giteapc: depends=Lephenixnoir/sh-elf-binutils PREFIX ?= $(GITEAPC_PREFIX) -VERSION = 11.1.0 +VERSION = 14.1.0 -include giteapc-config.make diff --git a/patches/gcc-14.1.0-libgcc-use-soft-fp.patch b/patches/gcc-14.1.0-libgcc-use-soft-fp.patch new file mode 100644 index 0000000..ceec1f0 --- /dev/null +++ b/patches/gcc-14.1.0-libgcc-use-soft-fp.patch @@ -0,0 +1,97 @@ +--- gcc-14.1.0/libgcc/config.host 2024-07-05 12:40:14.186620944 +0200 ++++ gcc-14.1.0/libgcc/config.host 2024-07-05 12:40:59.419954141 +0200 +@@ -1401,7 +1401,7 @@ + md_unwind_header=s390/tpf-unwind.h + ;; + sh-*-elf* | sh[12346l]*-*-elf*) +- tmake_file="$tmake_file sh/t-sh t-crtstuff-pic t-fdpbit" ++ tmake_file="$tmake_file sh/t-sh t-crtstuff-pic t-softfp-sfdf t-softfp" + extra_parts="$extra_parts crt1.o crti.o crtn.o crtbeginS.o crtendS.o \ + libic_invalidate_array_4-100.a \ + libic_invalidate_array_4-200.a \ +--- /dev/null 2024-06-26 21:19:11.279977120 +0200 ++++ gcc-14.1.0/libgcc/config/sh/sfp-machine.h 2024-07-05 12:42:07.016620609 +0200 +@@ -0,0 +1,83 @@ ++/* Software floating-point machine description for SuperH. ++ ++ Copyright (C) 2016-2024 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. ++ ++Under Section 7 of GPL version 3, you are granted additional ++permissions described in the GCC Runtime Library Exception, version ++3.1, as published by the Free Software Foundation. ++ ++You should have received a copy of the GNU General Public License and ++a copy of the GCC Runtime Library Exception along with this program; ++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see ++. */ ++ ++#define _FP_W_TYPE_SIZE 32 ++#define _FP_W_TYPE unsigned long ++#define _FP_WS_TYPE signed long ++#define _FP_I_TYPE long ++ ++#define _FP_MUL_MEAT_S(R,X,Y) \ ++ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_D(R,X,Y) \ ++ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_Q(R,X,Y) \ ++ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) ++ ++#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(S,R,X,Y) ++#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) ++#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) ++ ++#define _FP_NANFRAC_B _FP_QNANBIT_B ++#define _FP_NANFRAC_H _FP_QNANBIT_H ++#define _FP_NANFRAC_S _FP_QNANBIT_S ++#define _FP_NANFRAC_D _FP_QNANBIT_D, 0 ++#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0 ++ ++/* The type of the result of a floating point comparison. This must ++ match __libgcc_cmp_return__ in GCC for the target. */ ++typedef int __gcc_CMPtype __attribute__ ((mode (__libgcc_cmp_return__))); ++#define CMPtype __gcc_CMPtype ++ ++#define _FP_NANSIGN_B 0 ++#define _FP_NANSIGN_H 0 ++#define _FP_NANSIGN_S 0 ++#define _FP_NANSIGN_D 0 ++#define _FP_NANSIGN_Q 0 ++ ++#define _FP_KEEPNANFRACP 0 ++#define _FP_QNANNEGATEDP 0 ++ ++#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ ++ do { \ ++ R##_s = _FP_NANSIGN_##fs; \ ++ _FP_FRAC_SET_##wc(R,_FP_NANFRAC_##fs); \ ++ R##_c = FP_CLS_NAN; \ ++ } while (0) ++ ++#define _FP_TININESS_AFTER_ROUNDING 1 ++ ++#define __LITTLE_ENDIAN 1234 ++#define __BIG_ENDIAN 4321 ++ ++#if defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) ++#define __BYTE_ORDER __BIG_ENDIAN ++#else ++#define __BYTE_ORDER __LITTLE_ENDIAN ++#endif ++ ++/* Define ALIASNAME as a strong alias for NAME. */ ++# define strong_alias(name, aliasname) _strong_alias(name, aliasname) ++# define _strong_alias(name, aliasname) \ ++ extern __typeof (name) aliasname __attribute__ ((alias (#name)));