--- linux/arch/sparc/kernel/sparc_ksyms.c.jj Tue Jan 4 19:12:12 2000
+++ linux/arch/sparc/kernel/sparc_ksyms.c Fri Feb 4 15:11:48 2000
@@ -65,6 +65,7 @@ extern void bcopy (const char *, char *,
extern int __ashrdi3(int, int);
extern int __ashldi3(int, int);
extern int __lshrdi3(int, int);
+extern int __muldi3(int, int);
extern void dump_thread(struct pt_regs *, struct user *);
@@ -272,6 +273,7 @@ EXPORT_SYMBOL_NOVERS(memmove);
EXPORT_SYMBOL_NOVERS(__ashrdi3);
EXPORT_SYMBOL_NOVERS(__ashldi3);
EXPORT_SYMBOL_NOVERS(__lshrdi3);
+EXPORT_SYMBOL_NOVERS(__muldi3);
EXPORT_SYMBOL_DOT(rem);
EXPORT_SYMBOL_DOT(urem);
--- linux/arch/sparc/lib/muldi3.S.jj Fri Feb 4 15:05:09 2000
+++ linux/arch/sparc/lib/muldi3.S Fri Feb 4 15:04:21 2000
@@ -0,0 +1,64 @@
+/* $Id:$
+ * muldi3.S: GCC emits these for certain drivers playing
+ * with long longs.
+ *
+ * Copyright (C) 2000 Jakub Jelinek (
[email protected])
+ */
+
+ .text
+ .align 4
+ .globl __muldi3
+
+__muldi3:
+ save %sp, -112, %sp
+ wr %g0, %i1, %y
+ sra %i3, 0x1f, %o5
+ and %i1, %o5, %o5
+ andcc %g0, 0, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, %i3, %g1
+ mulscc %g1, 0, %g1
+ add %g1, %o5, %l0
+ rd %y, %o0
+ mov %o0, %l1
+ mov %i2, %o1
+ call .umul
+ mov %i1, %o0
+ mov %o0, %l2
+ mov %i0, %o0
+ call .umul
+ mov %i3, %o1
+ add %l2, %o0, %l2
+ mov %l1, %i1
+ ret
+ restore %l0, %l2, %o0
--- linux/arch/sparc/lib/Makefile.jj Tue Jan 4 19:12:13 2000
+++ linux/arch/sparc/lib/Makefile Fri Feb 4 15:12:28 2000
@@ -6,7 +6,7 @@ OBJS = mul.o rem.o sdiv.o udiv.o umul.o
strlen.o checksum.o blockops.o memscan.o memcmp.o strncmp.o \
strncpy_from_user.o divdi3.o udivdi3.o strlen_user.o \
copy_user.o locks.o atomic.o bitops.o debuglocks.o lshrdi3.o \
- ashldi3.o
+ ashldi3.o muldi3.o
ifdef CONFIG_SMP
OBJS += irqlock.o
@@ -62,6 +62,9 @@ endif
strlen.o: strlen.S
$(CC) -D__ASSEMBLY__ -ansi -c -o strlen.o strlen.S
+
+muldi3.o: muldi3.S
+ $(CC) -D__ASSEMBLY__ -ansi -c -o muldi3.o muldi3.S
divdi3.o: divdi3.S
$(CC) -D__ASSEMBLY__ -ansi -c -o divdi3.o divdi3.S