summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/m68k/include/asm/libgcc.h17
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/m68k/include/asm/libgcc.h b/arch/m68k/include/asm/libgcc.h
index 1cce6d130d80..27e17195bd7b 100644
--- a/arch/m68k/include/asm/libgcc.h
+++ b/arch/m68k/include/asm/libgcc.h
@@ -10,11 +10,18 @@
* will fallback to using the C-coded version of umul_ppmm().
*/
#define umul_ppmm(w1, w0, u, v) \
- __asm__ ("mulu%.l %3,%1:%0" \
- : "=d" ((unsigned long)(w0)), \
- "=d" ((unsigned long)(w1)) \
- : "%0" ((unsigned long)(u)), \
- "dmi" ((unsigned long)(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 */