5261 libm should stop using synonyms.h
5298 fabs is 0-sized, confuses dis(1) and others
Reviewed by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
Approved by: Gordon Ross <gwr@nexenta.com>
1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21 /*
22 * Copyright 2011 Nexenta Systems, Inc. All rights reserved.
23 */
24 /*
25 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
26 * Use is subject to license terms.
27 */
28
29 .file "remquo.s"
30
31 #include "libm.h"
32 LIBM_ANSI_PRAGMA_WEAK(remquo,function)
33 #include "libm_synonyms.h"
34 #include "libm_protos.h"
35
36 ENTRY(remquo)
37 fldl 12(%esp) / load arg y
38 fldl 4(%esp) / load arg x
39 .Lrem_loop:
40 fprem1 / partial remainder
41 fstsw %ax / store status word
42 andw $0x400,%ax / check whether reduction complete
43 jne .Lrem_loop / while reduction incomplete, do fprem1
44 fstsw %ax
45 fwait
46 fstp %st(1)
47 movw %ax,%dx
48 andw $0x4000,%dx / get C3
49 sarw $13,%dx
50 movw %ax,%cx
51 andw $0x100,%cx / get C0
52 sarw $6,%cx
53 addw %cx,%dx
54 andw $0x200,%ax / get C1
55 sarw $9,%ax
56 addw %dx,%ax
57 cwtl
58 movl 8(%esp),%edx / sign and bexp of x
59 movl 16(%esp),%ecx / sign and bexp of y
60 andl $0x80000000,%edx / edx <- sign(x)
61 andl $0x80000000,%ecx / ecx <- sign(y)
62 cmpl %edx,%ecx
63 je .pos
64 negl %eax / negative n
65 .pos:
66 movl 20(%esp),%ecx
67 movl %eax,0(%ecx) / last 3 significant bits of quotient
68 ret
69 .align 4
70 SET_SIZE(remquo)
--- EOF ---