root/arch/m68k/include/asm/libgcc.h
/* 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 */