mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-20 16:46:54 +00:00
GCC7 is a bit too eager to generate suboptimal __multi3 calls (128bit
multiply with 128bit result) for MIPS64r6 builds, even in code which
doesn't explicitly use 128bit types, such as the following:
unsigned long func(unsigned long a, unsigned long b)
{
return a > (~0UL) / b;
}
Which GCC rearanges to:
return (unsigned __int128)a * (unsigned __int128)b > 0xffffffffffffffff;
Therefore implement __multi3, but only for MIPS64r6 with GCC7 as under
normal circumstances we wouldn't expect any calls to __multi3 to be
generated from kernel code.
Reported-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: James Hogan <jhogan@kernel.org>
Tested-by: Waldemar Brodkorb <wbx@openadk.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Maciej W. Rozycki <macro@mips.com>
Cc: Matthew Fortune <matthew.fortune@mips.com>
Cc: Florian Fainelli <florian@openwrt.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/17890/
|
||
|---|---|---|
| .. | ||
| ashldi3.c | ||
| ashrdi3.c | ||
| bitops.c | ||
| bswapdi.c | ||
| bswapsi.c | ||
| cmpdi2.c | ||
| csum_partial.S | ||
| delay.c | ||
| dump_tlb.c | ||
| iomap_copy.c | ||
| iomap-pci.c | ||
| iomap.c | ||
| libgcc.h | ||
| lshrdi3.c | ||
| Makefile | ||
| memcpy.S | ||
| memset.S | ||
| mips-atomic.c | ||
| multi3.c | ||
| r3k_dump_tlb.c | ||
| strncpy_user.S | ||
| strnlen_user.S | ||
| ucmpdi2.c | ||
| uncached.c | ||