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