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