Annotation of OpenXM_contrib/gmp/mpn/sparc32/v8/addmul_1.S, Revision 1.1.1.1
1.1 maekawa 1: ! SPARC v8 __mpn_addmul_1 -- Multiply a limb vector with a limb and
2: ! add the result to a second limb vector.
3:
4: ! Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
5:
6: ! This file is part of the GNU MP Library.
7:
8: ! The GNU MP Library is free software; you can redistribute it and/or modify
9: ! it under the terms of the GNU Library General Public License as published by
10: ! the Free Software Foundation; either version 2 of the License, or (at your
11: ! option) any later version.
12:
13: ! The GNU MP Library is distributed in the hope that it will be useful, but
14: ! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
16: ! License for more details.
17:
18: ! You should have received a copy of the GNU Library General Public License
19: ! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
20: ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21: ! MA 02111-1307, USA.
22:
23:
24: ! INPUT PARAMETERS
25: ! res_ptr o0
26: ! s1_ptr o1
27: ! size o2
28: ! s2_limb o3
29:
30: #include "sysdep.h"
31:
32: .text
33: .align 4
34: .global C_SYMBOL_NAME(__mpn_addmul_1)
35: C_SYMBOL_NAME(__mpn_addmul_1):
36: orcc %g0,%g0,%g2
37: ld [%o1+0],%o4 ! 1
38:
39: sll %o2,4,%g1
40: and %g1,(4-1)<<4,%g1
41: #if PIC
42: mov %o7,%g4 ! Save return address register
43: call 1f
44: add %o7,LL-1f,%g3
45: 1: mov %g4,%o7 ! Restore return address register
46: #else
47: sethi %hi(LL),%g3
48: or %g3,%lo(LL),%g3
49: #endif
50: jmp %g3+%g1
51: nop
52: LL:
53: LL00: add %o0,-4,%o0
54: b Loop00 /* 4, 8, 12, ... */
55: add %o1,-4,%o1
56: nop
57: LL01: b Loop01 /* 1, 5, 9, ... */
58: nop
59: nop
60: nop
61: LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */
62: b Loop10
63: add %o1,4,%o1
64: nop
65: LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */
66: b Loop11
67: add %o1,-8,%o1
68: nop
69:
70: 1: addcc %g3,%g2,%g3 ! 1
71: ld [%o1+4],%o4 ! 2
72: rd %y,%g2 ! 1
73: addx %g0,%g2,%g2
74: ld [%o0+0],%g1 ! 2
75: addcc %g1,%g3,%g3
76: st %g3,[%o0+0] ! 1
77: Loop00: umul %o4,%o3,%g3 ! 2
78: ld [%o0+4],%g1 ! 2
79: addxcc %g3,%g2,%g3 ! 2
80: ld [%o1+8],%o4 ! 3
81: rd %y,%g2 ! 2
82: addx %g0,%g2,%g2
83: nop
84: addcc %g1,%g3,%g3
85: st %g3,[%o0+4] ! 2
86: Loop11: umul %o4,%o3,%g3 ! 3
87: addxcc %g3,%g2,%g3 ! 3
88: ld [%o1+12],%o4 ! 4
89: rd %y,%g2 ! 3
90: add %o1,16,%o1
91: addx %g0,%g2,%g2
92: ld [%o0+8],%g1 ! 2
93: addcc %g1,%g3,%g3
94: st %g3,[%o0+8] ! 3
95: Loop10: umul %o4,%o3,%g3 ! 4
96: addxcc %g3,%g2,%g3 ! 4
97: ld [%o1+0],%o4 ! 1
98: rd %y,%g2 ! 4
99: addx %g0,%g2,%g2
100: ld [%o0+12],%g1 ! 2
101: addcc %g1,%g3,%g3
102: st %g3,[%o0+12] ! 4
103: add %o0,16,%o0
104: addx %g0,%g2,%g2
105: Loop01: addcc %o2,-4,%o2
106: bg 1b
107: umul %o4,%o3,%g3 ! 1
108:
109: addcc %g3,%g2,%g3 ! 4
110: rd %y,%g2 ! 4
111: addx %g0,%g2,%g2
112: ld [%o0+0],%g1 ! 2
113: addcc %g1,%g3,%g3
114: st %g3,[%o0+0] ! 4
115: addx %g0,%g2,%o0
116:
117: retl
118: nop
119:
120:
121: ! umul, ld, addxcc, rd, st
122:
123: ! umul, ld, addxcc, rd, ld, addcc, st, addx
124:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>