Re: [PATCH v3] sh: Use generic GCC library routines

John Paul Adrian Glaubitz <[email protected]>
Newsgroups gmane.linux.ports.sh.devel,gmane.linux.kbuild.devel,gmane.linux.kernel
Message-ID <3c52c57f8bf4bedc0e7757937464d97f3f825394.camel@physik.fu-berlin.de>
On Thu, 2023-03-23 at 11:18 +0100, Geert Uytterhoeven wrote:
> The C implementations of __ashldi3(), __ashrdi3__(), and __lshrdi3() in
> arch/sh/lib/ are identical to the generic C implementations in lib/.
> Reduce duplication by switching SH to the generic versions.
> 
> Update the include path in arch/sh/boot/compressed accordingly.
> 
> Signed-off-by: Geert Uytterhoeven <[email protected]>
> Acked-by: Palmer Dabbelt <[email protected]>
> ---
> v3:
>   - Add Acked-by,
> 
> v2:
>   - Fix silly typo in subject.
> 
> Tested on landisk and qemu/rts7751r2d.
> 
> Note that it also works without the change to arch/sh/boot/compressed/,
> as lib/ashldi3.c can be reached via both include/uapi/../../lib/ashldi3.c
> and arch/sh/boot/compressed/../../../../lib/ashldi3.c.
> 
> Palmer tried a similar thing before:
> https://lore.kernel.org/linux-arch/[email protected]/
> but initially it broke the SH build due to a missing change to
> arch/sh/boot/compressed/, and the later update never got picked up.
> In the mean time, arch/sh/boot/compressed/ was changed, so his patch no
> longer applies.
> 
> Similar for the other architectures, I guess?
> ---
>  arch/sh/Kconfig                   |  3 +++
>  arch/sh/boot/compressed/ashldi3.c |  4 ++--
>  arch/sh/lib/Makefile              |  4 +---
>  arch/sh/lib/ashldi3.c             | 30 -----------------------------
>  arch/sh/lib/ashrdi3.c             | 32 -------------------------------
>  arch/sh/lib/lshrdi3.c             | 30 -----------------------------
>  6 files changed, 6 insertions(+), 97 deletions(-)
>  delete mode 100644 arch/sh/lib/ashldi3.c
>  delete mode 100644 arch/sh/lib/ashrdi3.c
>  delete mode 100644 arch/sh/lib/lshrdi3.c
> 
> diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
> index ccb866750a884643..892903dc74990c36 100644
> --- a/arch/sh/Kconfig
> +++ b/arch/sh/Kconfig
> @@ -20,6 +20,9 @@ config SUPERH
>  	select GENERIC_CMOS_UPDATE if SH_SH03 || SH_DREAMCAST
>  	select GENERIC_IDLE_POLL_SETUP
>  	select GENERIC_IRQ_SHOW
> +	select GENERIC_LIB_ASHLDI3
> +	select GENERIC_LIB_ASHRDI3
> +	select GENERIC_LIB_LSHRDI3
>  	select GENERIC_PCI_IOMAP if PCI
>  	select GENERIC_SCHED_CLOCK
>  	select GENERIC_SMP_IDLE_THREAD
> diff --git a/arch/sh/boot/compressed/ashldi3.c b/arch/sh/boot/compressed/ashldi3.c
> index 7cebd646df839b48..7c12121702309e8c 100644
> --- a/arch/sh/boot/compressed/ashldi3.c
> +++ b/arch/sh/boot/compressed/ashldi3.c
> @@ -1,2 +1,2 @@
> -// SPDX-License-Identifier: GPL-2.0-only
> -#include "../../lib/ashldi3.c"
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +#include "../../../../lib/ashldi3.c"
> diff --git a/arch/sh/lib/Makefile b/arch/sh/lib/Makefile
> index eb473d373ca43a4b..d20a0768b31fa2b6 100644
> --- a/arch/sh/lib/Makefile
> +++ b/arch/sh/lib/Makefile
> @@ -7,9 +7,7 @@ lib-y  = delay.o memmove.o memchr.o \
>  	 checksum.o strlen.o div64.o div64-generic.o
>  
>  # Extracted from libgcc
> -obj-y += movmem.o ashldi3.o ashrdi3.o lshrdi3.o \
> -	 ashlsi3.o ashrsi3.o ashiftrt.o lshrsi3.o \
> -	 udiv_qrnnd.o
> +obj-y += movmem.o ashlsi3.o ashrsi3.o ashiftrt.o lshrsi3.o udiv_qrnnd.o
>  
>  udivsi3-y			:= udivsi3_i4i-Os.o
>  
> diff --git a/arch/sh/lib/ashldi3.c b/arch/sh/lib/ashldi3.c
> deleted file mode 100644
> index e5afe0935847427f..0000000000000000
> --- a/arch/sh/lib/ashldi3.c
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/module.h>
> -
> -#include "libgcc.h"
> -
> -long long __ashldi3(long long u, word_type b)
> -{
> -	DWunion uu, w;
> -	word_type bm;
> -
> -	if (b == 0)
> -		return u;
> -
> -	uu.ll = u;
> -	bm = 32 - b;
> -
> -	if (bm <= 0) {
> -		w.s.low = 0;
> -		w.s.high = (unsigned int) uu.s.low << -bm;
> -	} else {
> -		const unsigned int carries = (unsigned int) uu.s.low >> bm;
> -
> -		w.s.low = (unsigned int) uu.s.low << b;
> -		w.s.high = ((unsigned int) uu.s.high << b) | carries;
> -	}
> -
> -	return w.ll;
> -}
> -
> -EXPORT_SYMBOL(__ashldi3);
> diff --git a/arch/sh/lib/ashrdi3.c b/arch/sh/lib/ashrdi3.c
> deleted file mode 100644
> index ae263fbf25383b70..0000000000000000
> --- a/arch/sh/lib/ashrdi3.c
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/module.h>
> -
> -#include "libgcc.h"
> -
> -long long __ashrdi3(long long u, word_type b)
> -{
> -	DWunion uu, w;
> -	word_type bm;
> -
> -	if (b == 0)
> -		return u;
> -
> -	uu.ll = u;
> -	bm = 32 - b;
> -
> -	if (bm <= 0) {
> -		/* w.s.high = 1..1 or 0..0 */
> -		w.s.high =
> -		    uu.s.high >> 31;
> -		w.s.low = uu.s.high >> -bm;
> -	} else {
> -		const unsigned int carries = (unsigned int) uu.s.high << bm;
> -
> -		w.s.high = uu.s.high >> b;
> -		w.s.low = ((unsigned int) uu.s.low >> b) | carries;
> -	}
> -
> -	return w.ll;
> -}
> -
> -EXPORT_SYMBOL(__ashrdi3);
> diff --git a/arch/sh/lib/lshrdi3.c b/arch/sh/lib/lshrdi3.c
> deleted file mode 100644
> index 33eaa1edbc3c0656..0000000000000000
> --- a/arch/sh/lib/lshrdi3.c
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.0
> -#include <linux/module.h>
> -
> -#include "libgcc.h"
> -
> -long long __lshrdi3(long long u, word_type b)
> -{
> -	DWunion uu, w;
> -	word_type bm;
> -
> -	if (b == 0)
> -		return u;
> -
> -	uu.ll = u;
> -	bm = 32 - b;
> -
> -	if (bm <= 0) {
> -		w.s.high = 0;
> -		w.s.low = (unsigned int) uu.s.high >> -bm;
> -	} else {
> -		const unsigned int carries = (unsigned int) uu.s.high << bm;
> -
> -		w.s.high = (unsigned int) uu.s.high >> b;
> -		w.s.low = ((unsigned int) uu.s.low >> b) | carries;
> -	}
> -
> -	return w.ll;
> -}
> -
> -EXPORT_SYMBOL(__lshrdi3);

Reviewed-by: John Paul Adrian Glaubitz <[email protected]>

-- 
 .''`.  John Paul Adrian Glaubitz
: :' :  Debian Developer
`. `'   Physicist
  `-    GPG: 62FF 8A75 84E0 2956 9546  0006 7426 3B37 F5B5 F913
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.