Home | History | Annotate | Line # | Download | only in sparc32
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