Home | History | Annotate | Line # | Download | only in sh3
sdivsi3_i4i.S revision 1.1
      1  1.1  uwe /*	$NetBSD: sdivsi3_i4i.S,v 1.1 2011/08/04 03:20:09 uwe Exp $	*/
      2  1.1  uwe 
      3  1.1  uwe /*-
      4  1.1  uwe  * Copyright (c) 1990 The Regents of the University of California.
      5  1.1  uwe  * All rights reserved.
      6  1.1  uwe  *
      7  1.1  uwe  * This code is derived from software contributed to Berkeley by
      8  1.1  uwe  * William Jolitz.
      9  1.1  uwe  *
     10  1.1  uwe  * Redistribution and use in source and binary forms, with or without
     11  1.1  uwe  * modification, are permitted provided that the following conditions
     12  1.1  uwe  * are met:
     13  1.1  uwe  * 1. Redistributions of source code must retain the above copyright
     14  1.1  uwe  *    notice, this list of conditions and the following disclaimer.
     15  1.1  uwe  * 2. Redistributions in binary form must reproduce the above copyright
     16  1.1  uwe  *    notice, this list of conditions and the following disclaimer in the
     17  1.1  uwe  *    documentation and/or other materials provided with the distribution.
     18  1.1  uwe  * 3. Neither the name of the University nor the names of its contributors
     19  1.1  uwe  *    may be used to endorse or promote products derived from this software
     20  1.1  uwe  *    without specific prior written permission.
     21  1.1  uwe  *
     22  1.1  uwe  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     23  1.1  uwe  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     24  1.1  uwe  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     25  1.1  uwe  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     26  1.1  uwe  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     27  1.1  uwe  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     28  1.1  uwe  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     29  1.1  uwe  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     30  1.1  uwe  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     31  1.1  uwe  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     32  1.1  uwe  * SUCH DAMAGE.
     33  1.1  uwe  *
     34  1.1  uwe  *	from: @(#)udivsi3.s	5.1 (Berkeley) 5/15/90
     35  1.1  uwe  */
     36  1.1  uwe 
     37  1.1  uwe #include <machine/asm.h>
     38  1.1  uwe #if defined(LIBC_SCCS)
     39  1.1  uwe 	RCSID("$NetBSD: sdivsi3_i4i.S,v 1.1 2011/08/04 03:20:09 uwe Exp $")
     40  1.1  uwe #endif
     41  1.1  uwe 
     42  1.1  uwe /* See comments in udivsi3_i4i.S */
     43  1.1  uwe 
     44  1.1  uwe #ifdef __ELF__
     45  1.1  uwe 	.hidden __sdivsi3_i4i
     46  1.1  uwe #endif
     47  1.1  uwe 
     48  1.1  uwe 
     49  1.1  uwe /* r0 <= r4 / r5 */
     50  1.1  uwe NENTRY(__sdivsi3_i4i)
     51  1.1  uwe 	mov	r4, r0
     52  1.1  uwe 	mov	r5, r1
     53  1.1  uwe 
     54  1.1  uwe 	tst	r1, r1
     55  1.1  uwe 	bt	.L_div_by_zero
     56  1.1  uwe 
     57  1.1  uwe 	!! this version cannot clobber r2 and r3, but can clobber macl/mach
     58  1.1  uwe 	lds	r2, macl
     59  1.1  uwe 	lds	r3, mach
     60  1.1  uwe 
     61  1.1  uwe 	mov	#0, r2
     62  1.1  uwe 	div0s	r2, r0
     63  1.1  uwe 	subc	r3, r3
     64  1.1  uwe 	subc	r2, r0
     65  1.1  uwe 	div0s	r1, r3
     66  1.1  uwe #define DIVSTEP	rotcl r0; div1 r1, r3
     67  1.1  uwe 	/* repeat 32 times */
     68  1.1  uwe 	DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP;
     69  1.1  uwe 	DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP;
     70  1.1  uwe 	DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP;
     71  1.1  uwe 	DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP; DIVSTEP;
     72  1.1  uwe #undef DIVSTEP
     73  1.1  uwe 	rotcl	r0
     74  1.1  uwe 
     75  1.1  uwe 	addc	r2, r0
     76  1.1  uwe 
     77  1.1  uwe 	sts	mach, r3
     78  1.1  uwe 	sts	macl, r2
     79  1.1  uwe 
     80  1.1  uwe 	rts
     81  1.1  uwe 	 nop
     82  1.1  uwe 
     83  1.1  uwe .L_div_by_zero:
     84  1.1  uwe 	rts
     85  1.1  uwe 	 mov	#0, r0
     86