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