]> rtime.felk.cvut.cz Git - mcf548x/linux.git/blobdiff - arch/m68k/coldfire/muldi3.S
Headers cleanup
[mcf548x/linux.git] / arch / m68k / coldfire / muldi3.S
diff --git a/arch/m68k/coldfire/muldi3.S b/arch/m68k/coldfire/muldi3.S
new file mode 100644 (file)
index 0000000..90659c8
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Coldfire muldi3 assembly verion
+ */
+#include <linux/linkage.h>
+.globl __muldi3
+
+ENTRY(__muldi3)
+       linkw   %fp,#0
+       lea     %sp@(-32),%sp
+       moveml  %d2-%d7/%a2-%a3,%sp@
+       moveal  %fp@(8), %a2
+       moveal  %fp@(12), %a3
+       moveal  %fp@(16), %a0
+       moveal  %fp@(20),%a1
+       movel   %a3,%d2
+       andil   #65535,%d2
+       movel   %a3,%d3
+       clrw    %d3
+       swap    %d3
+       movel   %a1,%d0
+       andil   #65535,%d0
+       movel   %a1,%d1
+       clrw    %d1
+       swap    %d1
+       movel   %d2,%d7
+       mulsl   %d0,%d7
+       movel   %d2,%d4
+       mulsl   %d1,%d4
+       movel   %d3,%d2
+       mulsl   %d0,%d2
+       mulsl   %d1,%d3
+       movel   %d7,%d0
+       clrw    %d0
+       swap    %d0
+       addl    %d0,%d4
+       addl    %d2,%d4
+       cmpl    %d4,%d2
+       blss    1f
+       addil   #65536,%d3
+1:
+       movel   %d4,%d0
+       clrw    %d0
+       swap    %d0
+       movel   %d3,%d5
+       addl    %d0,%d5
+       movew   %d4,%d6
+       swap    %d6
+       movew   %d7,%d6
+       movel   %d5,%d0
+       movel   %d6,%d1
+       movel   %a3,%d2
+       movel   %a0,%d3
+       mulsl   %d3,%d2
+       movel   %a2,%d3
+       movel   %a1,%d4
+       mulsl   %d4,%d3
+       addl    %d3,%d2
+       movel   %d2,%d0
+       addl    %d5,%d0
+       moveml  %sp@, %d2-%d7/%a2-%a3
+       lea     %sp@(32),%sp
+       unlk    %fp
+       rts