Annotation of OpenXM_contrib/gmp/mpn/sparc32/udiv_fp.asm, Revision 1.1.1.1
1.1 maekawa 1: dnl SPARC v7 __udiv_qrnnd division support, used from longlong.h.
2: dnl This is for v7 CPUs with a floating-point unit.
3:
4: dnl Copyright (C) 1993, 1994, 1996, 2000 Free Software Foundation, Inc.
5:
6: dnl This file is part of the GNU MP Library.
7:
8: dnl The GNU MP Library is free software; you can redistribute it and/or modify
9: dnl it under the terms of the GNU Lesser General Public License as published
10: dnl by the Free Software Foundation; either version 2.1 of the License, or (at
11: dnl your option) any later version.
12:
13: dnl The GNU MP Library is distributed in the hope that it will be useful, but
14: dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15: dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16: dnl License for more details.
17:
18: dnl You should have received a copy of the GNU Lesser General Public License
19: dnl along with the GNU MP Library; see the file COPYING.LIB. If not, write to
20: dnl the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21: dnl MA 02111-1307, USA.
22:
23:
24: include(`../config.m4')
25:
26: C INPUT PARAMETERS
27: C rem_ptr i0
28: C n1 i1
29: C n0 i2
30: C d i3
31:
32: ASM_START()
33:
34: ifdef(`PIC',
35: ` TEXT
36: L(getpc):
37: retl
38: nop')
39:
40: TEXT
41: ALIGN(8)
42: L(C0): .double 0r4294967296
43: L(C1): .double 0r2147483648
44:
45: PROLOGUE(mpn_udiv_qrnnd)
46: save %sp,-104,%sp
47: st %i1,[%fp-8]
48: ld [%fp-8],%f10
49:
50: ifdef(`PIC',
51: `L(pc): call L(getpc) C put address of this insn in %o7
52: ldd [%o7+L(C0)-L(pc)],%f8',
53: ` sethi %hi(L(C0)),%o7
54: ldd [%o7+%lo(L(C0))],%f8')
55:
56: fitod %f10,%f4
57: cmp %i1,0
58: bge L(248)
59: mov %i0,%i5
60: faddd %f4,%f8,%f4
61: L(248):
62: st %i2,[%fp-8]
63: ld [%fp-8],%f10
64: fmuld %f4,%f8,%f6
65: cmp %i2,0
66: bge L(249)
67: fitod %f10,%f2
68: faddd %f2,%f8,%f2
69: L(249):
70: st %i3,[%fp-8]
71: faddd %f6,%f2,%f2
72: ld [%fp-8],%f10
73: cmp %i3,0
74: bge L(250)
75: fitod %f10,%f4
76: faddd %f4,%f8,%f4
77: L(250):
78: fdivd %f2,%f4,%f2
79:
80: ifdef(`PIC',
81: ` ldd [%o7+L(C1)-L(pc)],%f4',
82: ` sethi %hi(L(C1)),%o7
83: ldd [%o7+%lo(L(C1))],%f4')
84:
85: fcmped %f2,%f4
86: nop
87: fbge,a L(251)
88: fsubd %f2,%f4,%f2
89: fdtoi %f2,%f2
90: st %f2,[%fp-8]
91: b L(252)
92: ld [%fp-8],%i4
93: L(251):
94: fdtoi %f2,%f2
95: st %f2,[%fp-8]
96: ld [%fp-8],%i4
97: sethi %hi(-2147483648),%g2
98: xor %i4,%g2,%i4
99: L(252):
100: wr %g0,%i4,%y
101: sra %i3,31,%g2
102: and %i4,%g2,%g2
103: andcc %g0,0,%g1
104: mulscc %g1,%i3,%g1
105: mulscc %g1,%i3,%g1
106: mulscc %g1,%i3,%g1
107: mulscc %g1,%i3,%g1
108: mulscc %g1,%i3,%g1
109: mulscc %g1,%i3,%g1
110: mulscc %g1,%i3,%g1
111: mulscc %g1,%i3,%g1
112: mulscc %g1,%i3,%g1
113: mulscc %g1,%i3,%g1
114: mulscc %g1,%i3,%g1
115: mulscc %g1,%i3,%g1
116: mulscc %g1,%i3,%g1
117: mulscc %g1,%i3,%g1
118: mulscc %g1,%i3,%g1
119: mulscc %g1,%i3,%g1
120: mulscc %g1,%i3,%g1
121: mulscc %g1,%i3,%g1
122: mulscc %g1,%i3,%g1
123: mulscc %g1,%i3,%g1
124: mulscc %g1,%i3,%g1
125: mulscc %g1,%i3,%g1
126: mulscc %g1,%i3,%g1
127: mulscc %g1,%i3,%g1
128: mulscc %g1,%i3,%g1
129: mulscc %g1,%i3,%g1
130: mulscc %g1,%i3,%g1
131: mulscc %g1,%i3,%g1
132: mulscc %g1,%i3,%g1
133: mulscc %g1,%i3,%g1
134: mulscc %g1,%i3,%g1
135: mulscc %g1,%i3,%g1
136: mulscc %g1,0,%g1
137: add %g1,%g2,%i0
138: rd %y,%g3
139: subcc %i2,%g3,%o7
140: subxcc %i1,%i0,%g0
141: be L(253)
142: cmp %o7,%i3
143:
144: add %i4,-1,%i0
145: add %o7,%i3,%o7
146: st %o7,[%i5]
147: ret
148: restore
149: L(253):
150: blu L(246)
151: mov %i4,%i0
152: add %i4,1,%i0
153: sub %o7,%i3,%o7
154: L(246):
155: st %o7,[%i5]
156: ret
157: restore
158: EPILOGUE(mpn_udiv_qrnnd)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>