OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgcc/] [config/] [alpha/] [qrnnd.S] - Blame information for rev 734

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 734 jeremybenn
 # Alpha 21064 __udiv_qrnnd
2
 # Copyright (C) 1992, 1994, 1995, 2000, 2009 Free Software Foundation, Inc.
3
 
4
 # This file is part of GCC.
5
 
6
 # The GNU MP Library is free software; you can redistribute it and/or modify
7
 # it under the terms of the GNU General Public License as published by
8
 # the Free Software Foundation; either version 3 of the License, or (at your
9
 # option) any later version.
10
 
11
 # This file is distributed in the hope that it will be useful, but
12
 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13
 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
14
 # License for more details.
15
 
16
 # Under Section 7 of GPL version 3, you are granted additional
17
 # permissions described in the GCC Runtime Library Exception, version
18
 # 3.1, as published by the Free Software Foundation.
19
 
20
 # You should have received a copy of the GNU General Public License and
21
 # a copy of the GCC Runtime Library Exception along with this program;
22
 # see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
 # .
24
 
25
#ifdef __ELF__
26
.section .note.GNU-stack,""
27
#endif
28
 
29
        .set noreorder
30
        .set noat
31
 
32
        .text
33
 
34
        .globl __udiv_qrnnd
35
        .ent __udiv_qrnnd
36
#ifdef __VMS__
37
__udiv_qrnnd..en:
38
        .frame $29,0,$26,0
39
        .prologue
40
#else
41
__udiv_qrnnd:
42
        .frame $30,0,$26,0
43
        .prologue 0
44
#endif
45
 
46
#define cnt     $2
47
#define tmp     $3
48
#define rem_ptr $16
49
#define n1      $17
50
#define n0      $18
51
#define d       $19
52
#define qb      $20
53
#define AT      $at
54
 
55
        ldiq    cnt,16
56
        blt     d,$largedivisor
57
 
58
$loop1: cmplt   n0,0,tmp
59
        addq    n1,n1,n1
60
        bis     n1,tmp,n1
61
        addq    n0,n0,n0
62
        cmpule  d,n1,qb
63
        subq    n1,d,tmp
64
        cmovne  qb,tmp,n1
65
        bis     n0,qb,n0
66
        cmplt   n0,0,tmp
67
        addq    n1,n1,n1
68
        bis     n1,tmp,n1
69
        addq    n0,n0,n0
70
        cmpule  d,n1,qb
71
        subq    n1,d,tmp
72
        cmovne  qb,tmp,n1
73
        bis     n0,qb,n0
74
        cmplt   n0,0,tmp
75
        addq    n1,n1,n1
76
        bis     n1,tmp,n1
77
        addq    n0,n0,n0
78
        cmpule  d,n1,qb
79
        subq    n1,d,tmp
80
        cmovne  qb,tmp,n1
81
        bis     n0,qb,n0
82
        cmplt   n0,0,tmp
83
        addq    n1,n1,n1
84
        bis     n1,tmp,n1
85
        addq    n0,n0,n0
86
        cmpule  d,n1,qb
87
        subq    n1,d,tmp
88
        cmovne  qb,tmp,n1
89
        bis     n0,qb,n0
90
        subq    cnt,1,cnt
91
        bgt     cnt,$loop1
92
        stq     n1,0(rem_ptr)
93
        bis     $31,n0,$0
94
        ret     $31,($26),1
95
 
96
$largedivisor:
97
        and     n0,1,$4
98
 
99
        srl     n0,1,n0
100
        sll     n1,63,tmp
101
        or      tmp,n0,n0
102
        srl     n1,1,n1
103
 
104
        and     d,1,$6
105
        srl     d,1,$5
106
        addq    $5,$6,$5
107
 
108
$loop2: cmplt   n0,0,tmp
109
        addq    n1,n1,n1
110
        bis     n1,tmp,n1
111
        addq    n0,n0,n0
112
        cmpule  $5,n1,qb
113
        subq    n1,$5,tmp
114
        cmovne  qb,tmp,n1
115
        bis     n0,qb,n0
116
        cmplt   n0,0,tmp
117
        addq    n1,n1,n1
118
        bis     n1,tmp,n1
119
        addq    n0,n0,n0
120
        cmpule  $5,n1,qb
121
        subq    n1,$5,tmp
122
        cmovne  qb,tmp,n1
123
        bis     n0,qb,n0
124
        cmplt   n0,0,tmp
125
        addq    n1,n1,n1
126
        bis     n1,tmp,n1
127
        addq    n0,n0,n0
128
        cmpule  $5,n1,qb
129
        subq    n1,$5,tmp
130
        cmovne  qb,tmp,n1
131
        bis     n0,qb,n0
132
        cmplt   n0,0,tmp
133
        addq    n1,n1,n1
134
        bis     n1,tmp,n1
135
        addq    n0,n0,n0
136
        cmpule  $5,n1,qb
137
        subq    n1,$5,tmp
138
        cmovne  qb,tmp,n1
139
        bis     n0,qb,n0
140
        subq    cnt,1,cnt
141
        bgt     cnt,$loop2
142
 
143
        addq    n1,n1,n1
144
        addq    $4,n1,n1
145
        bne     $6,$Odd
146
        stq     n1,0(rem_ptr)
147
        bis     $31,n0,$0
148
        ret     $31,($26),1
149
 
150
$Odd:
151
        /* q' in n0. r' in n1 */
152
        addq    n1,n0,n1
153
 
154
        cmpult  n1,n0,tmp       # tmp := carry from addq
155
        subq    n1,d,AT
156
        addq    n0,tmp,n0
157
        cmovne  tmp,AT,n1
158
 
159
        cmpult  n1,d,tmp
160
        addq    n0,1,AT
161
        cmoveq  tmp,AT,n0
162
        subq    n1,d,AT
163
        cmoveq  tmp,AT,n1
164
 
165
        stq     n1,0(rem_ptr)
166
        bis     $31,n0,$0
167
        ret     $31,($26),1
168
 
169
#ifdef __VMS__
170
        .link
171
        .align 3
172
__udiv_qrnnd:
173
        .pdesc  __udiv_qrnnd..en,null
174
#endif
175
        .end    __udiv_qrnnd

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.