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