Annotation of OpenXM_contrib/gmp/mpn/m68k/mc68020/mul_1.asm, Revision 1.1.1.1
1.1 ohara 1: dnl mc68020 mpn_mul_1 -- mpn by limb multiply
2: dnl
3: dnl cycles/limb
4: dnl 68040: 19.5
5:
6: dnl Copyright 1992, 1994, 1996, 1999, 2000, 2001 Free Software Foundation,
7: dnl Inc.
8: dnl
9: dnl This file is part of the GNU MP Library.
10: dnl
11: dnl The GNU MP Library is free software; you can redistribute it and/or
12: dnl modify it under the terms of the GNU Lesser General Public License as
13: dnl published by the Free Software Foundation; either version 2.1 of the
14: dnl License, or (at your option) any later version.
15: dnl
16: dnl The GNU MP Library is distributed in the hope that it will be useful,
17: dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
18: dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19: dnl Lesser General Public License for more details.
20: dnl
21: dnl You should have received a copy of the GNU Lesser General Public
22: dnl License along with the GNU MP Library; see the file COPYING.LIB. If
23: dnl not, write to the Free Software Foundation, Inc., 59 Temple Place -
24: dnl Suite 330, Boston, MA 02111-1307, USA.
25:
26: include(`../config.m4')
27:
28:
29: C INPUT PARAMETERS
30: C res_ptr (sp + 4)
31: C s1_ptr (sp + 8)
32: C s1_size (sp + 12)
33: C s2_limb (sp + 16)
34:
35:
36: define(res_ptr, `a0')
37: define(s1_ptr, `a1')
38: define(s1_size, `d2')
39: define(s2_limb, `d4')
40:
41:
42: PROLOGUE(mpn_mul_1)
43:
44: C Save used registers on the stack.
45: moveml d2-d4, M(-,sp)
46:
47: C movel d2, M(-,sp)
48: C movel d3, M(-,sp)
49: C movel d4, M(-,sp)
50:
51: C Copy the arguments to registers. Better use movem?
52: movel M(sp,16), res_ptr
53: movel M(sp,20), s1_ptr
54: movel M(sp,24), s1_size
55: movel M(sp,28), s2_limb
56:
57: eorw #1, s1_size
58: clrl d1
59: lsrl #1, s1_size
60: bcc L(L1)
61: subql #1, s1_size
62: subl d0, d0 C (d0,cy) <= (0,0)
63:
64: L(Loop):
65: movel M(s1_ptr,+), d3
66: mulul s2_limb, d1:d3
67: addxl d0, d3
68: movel d3, M(res_ptr,+)
69: L(L1): movel M(s1_ptr,+), d3
70: mulul s2_limb, d0:d3
71: addxl d1, d3
72: movel d3, M(res_ptr,+)
73:
74: dbf s1_size, L(Loop)
75: clrl d3
76: addxl d3, d0
77: subl #0x10000, s1_size
78: bcc L(Loop)
79:
80: C Restore used registers from stack frame.
81: moveml M(sp,+), d2-d4
82:
83: C movel M(sp,+),d4
84: C movel M(sp,+),d3
85: C movel M(sp,+),d2
86:
87: rts
88:
89: EPILOGUE(mpn_mul_1)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>