Home | History | Annotate | Line # | Download | only in sparc32
      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 without 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	o0
     37      1.1  mrg C n1		o1
     38      1.1  mrg C n0		o2
     39      1.1  mrg C d		o3
     40      1.1  mrg 
     41      1.1  mrg ASM_START()
     42      1.1  mrg PROLOGUE(mpn_udiv_qrnnd)
     43      1.1  mrg 	tst	%o3
     44      1.1  mrg 	bneg	L(largedivisor)
     45      1.1  mrg 	mov	8,%g1
     46      1.1  mrg 
     47      1.1  mrg 	b	L(p1)
     48      1.1  mrg 	addxcc	%o2,%o2,%o2
     49      1.1  mrg 
     50      1.1  mrg L(plop):
     51      1.1  mrg 	bcc	L(n1)
     52      1.1  mrg 	addxcc	%o2,%o2,%o2
     53      1.1  mrg L(p1):	addx	%o1,%o1,%o1
     54      1.1  mrg 	subcc	%o1,%o3,%o4
     55      1.1  mrg 	bcc	L(n2)
     56      1.1  mrg 	addxcc	%o2,%o2,%o2
     57      1.1  mrg L(p2):	addx	%o1,%o1,%o1
     58      1.1  mrg 	subcc	%o1,%o3,%o4
     59      1.1  mrg 	bcc	L(n3)
     60      1.1  mrg 	addxcc	%o2,%o2,%o2
     61      1.1  mrg L(p3):	addx	%o1,%o1,%o1
     62      1.1  mrg 	subcc	%o1,%o3,%o4
     63      1.1  mrg 	bcc	L(n4)
     64      1.1  mrg 	addxcc	%o2,%o2,%o2
     65      1.1  mrg L(p4):	addx	%o1,%o1,%o1
     66      1.1  mrg 	addcc	%g1,-1,%g1
     67      1.1  mrg 	bne	L(plop)
     68      1.1  mrg 	subcc	%o1,%o3,%o4
     69      1.1  mrg 	bcc	L(n5)
     70      1.1  mrg 	addxcc	%o2,%o2,%o2
     71      1.1  mrg L(p5):	st	%o1,[%o0]
     72      1.1  mrg 	retl
     73      1.1  mrg 	xnor	%g0,%o2,%o0
     74      1.1  mrg 
     75      1.1  mrg L(nlop):
     76      1.1  mrg 	bcc	L(p1)
     77      1.1  mrg 	addxcc	%o2,%o2,%o2
     78      1.1  mrg L(n1):	addx	%o4,%o4,%o4
     79      1.1  mrg 	subcc	%o4,%o3,%o1
     80      1.1  mrg 	bcc	L(p2)
     81      1.1  mrg 	addxcc	%o2,%o2,%o2
     82      1.1  mrg L(n2):	addx	%o4,%o4,%o4
     83      1.1  mrg 	subcc	%o4,%o3,%o1
     84      1.1  mrg 	bcc	L(p3)
     85      1.1  mrg 	addxcc	%o2,%o2,%o2
     86      1.1  mrg L(n3):	addx	%o4,%o4,%o4
     87      1.1  mrg 	subcc	%o4,%o3,%o1
     88      1.1  mrg 	bcc	L(p4)
     89      1.1  mrg 	addxcc	%o2,%o2,%o2
     90      1.1  mrg L(n4):	addx	%o4,%o4,%o4
     91      1.1  mrg 	addcc	%g1,-1,%g1
     92      1.1  mrg 	bne	L(nlop)
     93      1.1  mrg 	subcc	%o4,%o3,%o1
     94      1.1  mrg 	bcc	L(p5)
     95      1.1  mrg 	addxcc	%o2,%o2,%o2
     96      1.1  mrg L(n5):	st	%o4,[%o0]
     97      1.1  mrg 	retl
     98      1.1  mrg 	xnor	%g0,%o2,%o0
     99      1.1  mrg 
    100      1.1  mrg L(largedivisor):
    101      1.1  mrg 	and	%o2,1,%o5	C %o5 = n0 & 1
    102      1.1  mrg 
    103      1.1  mrg 	srl	%o2,1,%o2
    104      1.1  mrg 	sll	%o1,31,%g2
    105      1.1  mrg 	or	%g2,%o2,%o2	C %o2 = lo(n1n0 >> 1)
    106      1.1  mrg 	srl	%o1,1,%o1	C %o1 = hi(n1n0 >> 1)
    107      1.1  mrg 
    108      1.1  mrg 	and	%o3,1,%g2
    109      1.1  mrg 	srl	%o3,1,%g3	C %g3 = floor(d / 2)
    110      1.1  mrg 	add	%g3,%g2,%g3	C %g3 = ceil(d / 2)
    111      1.1  mrg 
    112      1.1  mrg 	b	L(Lp1)
    113      1.1  mrg 	addxcc	%o2,%o2,%o2
    114      1.1  mrg 
    115      1.1  mrg L(Lplop):
    116      1.1  mrg 	bcc	L(Ln1)
    117      1.1  mrg 	addxcc	%o2,%o2,%o2
    118      1.1  mrg L(Lp1):	addx	%o1,%o1,%o1
    119      1.1  mrg 	subcc	%o1,%g3,%o4
    120      1.1  mrg 	bcc	L(Ln2)
    121      1.1  mrg 	addxcc	%o2,%o2,%o2
    122      1.1  mrg L(Lp2):	addx	%o1,%o1,%o1
    123      1.1  mrg 	subcc	%o1,%g3,%o4
    124      1.1  mrg 	bcc	L(Ln3)
    125      1.1  mrg 	addxcc	%o2,%o2,%o2
    126      1.1  mrg L(Lp3):	addx	%o1,%o1,%o1
    127      1.1  mrg 	subcc	%o1,%g3,%o4
    128      1.1  mrg 	bcc	L(Ln4)
    129      1.1  mrg 	addxcc	%o2,%o2,%o2
    130      1.1  mrg L(Lp4):	addx	%o1,%o1,%o1
    131      1.1  mrg 	addcc	%g1,-1,%g1
    132      1.1  mrg 	bne	L(Lplop)
    133      1.1  mrg 	subcc	%o1,%g3,%o4
    134      1.1  mrg 	bcc	L(Ln5)
    135      1.1  mrg 	addxcc	%o2,%o2,%o2
    136      1.1  mrg L(Lp5):	add	%o1,%o1,%o1	C << 1
    137      1.1  mrg 	tst	%g2
    138      1.1  mrg 	bne	L(oddp)
    139      1.1  mrg 	add	%o5,%o1,%o1
    140      1.1  mrg 	st	%o1,[%o0]
    141      1.1  mrg 	retl
    142      1.1  mrg 	xnor	%g0,%o2,%o0
    143      1.1  mrg 
    144      1.1  mrg L(Lnlop):
    145      1.1  mrg 	bcc	L(Lp1)
    146      1.1  mrg 	addxcc	%o2,%o2,%o2
    147      1.1  mrg L(Ln1):	addx	%o4,%o4,%o4
    148      1.1  mrg 	subcc	%o4,%g3,%o1
    149      1.1  mrg 	bcc	L(Lp2)
    150      1.1  mrg 	addxcc	%o2,%o2,%o2
    151      1.1  mrg L(Ln2):	addx	%o4,%o4,%o4
    152      1.1  mrg 	subcc	%o4,%g3,%o1
    153      1.1  mrg 	bcc	L(Lp3)
    154      1.1  mrg 	addxcc	%o2,%o2,%o2
    155      1.1  mrg L(Ln3):	addx	%o4,%o4,%o4
    156      1.1  mrg 	subcc	%o4,%g3,%o1
    157      1.1  mrg 	bcc	L(Lp4)
    158      1.1  mrg 	addxcc	%o2,%o2,%o2
    159      1.1  mrg L(Ln4):	addx	%o4,%o4,%o4
    160      1.1  mrg 	addcc	%g1,-1,%g1
    161      1.1  mrg 	bne	L(Lnlop)
    162      1.1  mrg 	subcc	%o4,%g3,%o1
    163      1.1  mrg 	bcc	L(Lp5)
    164      1.1  mrg 	addxcc	%o2,%o2,%o2
    165      1.1  mrg L(Ln5):	add	%o4,%o4,%o4	C << 1
    166      1.1  mrg 	tst	%g2
    167      1.1  mrg 	bne	L(oddn)
    168      1.1  mrg 	add	%o5,%o4,%o4
    169      1.1  mrg 	st	%o4,[%o0]
    170      1.1  mrg 	retl
    171      1.1  mrg 	xnor	%g0,%o2,%o0
    172      1.1  mrg 
    173      1.1  mrg L(oddp):
    174      1.1  mrg 	xnor	%g0,%o2,%o2
    175      1.1  mrg 	C q' in %o2. r' in %o1
    176      1.1  mrg 	addcc	%o1,%o2,%o1
    177      1.1  mrg 	bcc	L(Lp6)
    178      1.1  mrg 	addx	%o2,0,%o2
    179      1.1  mrg 	sub	%o1,%o3,%o1
    180      1.1  mrg L(Lp6):	subcc	%o1,%o3,%g0
    181      1.1  mrg 	bcs	L(Lp7)
    182      1.1  mrg 	subx	%o2,-1,%o2
    183      1.1  mrg 	sub	%o1,%o3,%o1
    184      1.1  mrg L(Lp7):	st	%o1,[%o0]
    185      1.1  mrg 	retl
    186      1.1  mrg 	mov	%o2,%o0
    187      1.1  mrg 
    188      1.1  mrg L(oddn):
    189      1.1  mrg 	xnor	%g0,%o2,%o2
    190      1.1  mrg 	C q' in %o2. r' in %o4
    191      1.1  mrg 	addcc	%o4,%o2,%o4
    192      1.1  mrg 	bcc	L(Ln6)
    193      1.1  mrg 	addx	%o2,0,%o2
    194      1.1  mrg 	sub	%o4,%o3,%o4
    195      1.1  mrg L(Ln6):	subcc	%o4,%o3,%g0
    196      1.1  mrg 	bcs	L(Ln7)
    197      1.1  mrg 	subx	%o2,-1,%o2
    198      1.1  mrg 	sub	%o4,%o3,%o4
    199      1.1  mrg L(Ln7):	st	%o4,[%o0]
    200      1.1  mrg 	retl
    201      1.1  mrg 	mov	%o2,%o0
    202      1.1  mrg EPILOGUE(mpn_udiv_qrnnd)
    203