Index: oldkernel/linux/arch/sparc/kernel/sparc_ksyms.c diff -u linux/arch/sparc/kernel/sparc_ksyms.c:1.1.1.1 linux/arch/sparc/kernel/sparc_ksyms.c:1.2 --- linux/arch/sparc/kernel/sparc_ksyms.c:1.1.1.1 Wed May 31 12:33:53 2000 +++ linux/arch/sparc/kernel/sparc_ksyms.c Thu Jun 1 15:12:09 2000 @@ -65,6 +65,7 @@ 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(__ashrdi3); EXPORT_SYMBOL_NOVERS(__ashldi3); EXPORT_SYMBOL_NOVERS(__lshrdi3); +EXPORT_SYMBOL_NOVERS(__muldi3); EXPORT_SYMBOL_DOT(rem); EXPORT_SYMBOL_DOT(urem); Index: oldkernel/linux/arch/sparc/lib/Makefile diff -u linux/arch/sparc/lib/Makefile:1.1.1.1 linux/arch/sparc/lib/Makefile:1.2 --- linux/arch/sparc/lib/Makefile:1.1.1.1 Wed May 31 12:33:53 2000 +++ linux/arch/sparc/lib/Makefile Thu Jun 1 15:12:09 2000 @@ -6,7 +6,7 @@ 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 @@ 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 Index: oldkernel/linux/arch/sparc/lib/muldi3.S diff -u /dev/null linux/arch/sparc/lib/muldi3.S:1.1 --- /dev/null Mon Jul 31 21:12:40 2000 +++ linux/arch/sparc/lib/muldi3.S Thu Jun 1 15:12:09 2000 @@ -0,0 +1,64 @@ +/* $Id: muldi3.S,v 1.1 2000/06/01 22:12:09 ccr Exp $ + * muldi3.S: GCC emits these for certain drivers playing + * with long longs. + * + * Copyright (C) 2000 Jakub Jelinek (jakub@redhat.com) + */ + + .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