linux/arch/m68k/include/asm/libgcc.h
Geert Uytterhoeven bb2e0fb1e6 m68k: libgcc: Fix lvalue abuse in umul_ppmm()
lib/muldi3.c:53:28: warning: asm output is not an lvalue
    lib/muldi3.c:53:28: warning: asm output is not an lvalue
    lib/muldi3.c:53:28: error: not addressable
    lib/muldi3.c:53:28: warning: generating address of non-lvalue (11)
    lib/muldi3.c:53:28: warning: generating address of non-lvalue (11)

Fix the lvalue warnings by replacing the casts on the output operands by
intermediate variables of the right type.

Fix the "not addressable" error by replacing the cast on the second
input operand by an intermediate variable, too.  Treat the other input
operand the same for consistency.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202501030516.uZrwnuQQ-lkp@intel.com/
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Greg Ungerer <gerg@linux-m68k.org>
Link: https://lore.kernel.org/c408cfb85bfde8929dcaa4ebea29ade4e1452d8e.1736356696.git.geert@linux-m68k.org
2025-01-10 10:26:52 +01:00

27 lines
782 B
C

/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __ASM_M68K_LIBGCC_H
#define __ASM_M68K_LIBGCC_H
#ifndef CONFIG_CPU_HAS_NO_MULDIV64
/*
* For those 68K CPUs that support 64bit multiply define umul_ppm()
* for the common muldi3 libgcc helper function (in lib/muldi3.c).
* CPUs that don't have it (like the original 68000 and ColdFire)
* will fallback to using the C-coded version of umul_ppmm().
*/
#define umul_ppmm(w1, w0, u, v) \
do { \
unsigned long __u = (u), __v = (v); \
unsigned long __w0, __w1; \
\
__asm__ ("mulu%.l %3,%1:%0" \
: "=d" (__w0), \
"=d" (__w1) \
: "%0" (__u), \
"dmi" (__v)); \
\
(w0) = __w0; (w1) = __w1; \
} while (0)
#endif /* !CONFIG_CPU_HAS_NO_MULDIV64 */
#endif /* __ASM_M68K_LIBGCC_H */