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 "isnan.s" 30 31#include "libm.h" 32LIBM_ANSI_PRAGMA_WEAK(isnan,function) 33 .weak _isnan 34 .type _isnan,@function 35_isnan = __isnan 36 .weak _isnand 37 .type _isnand,@function 38_isnand = __isnan 39 .weak isnand 40 .type isnand,@function 41isnand = __isnan 42 43 ENTRY(isnan) 44 movl 8(%esp),%eax / eax <-- hi_32(x) 45 andl $0x7fffffff,%eax / eax <-- hi_32(abs(x)) 46 subl $0x7ff00000,%eax / weed out finite values 47 jae .nan_or_inf / no jump if arg. is finite 48 movl $0,%eax / ansi needs (eax) = 0 49 ret 50.nan_or_inf: 51 ja .got_nan / no jump if arg. may be infinite; 52 / let nan waste time 53 / (eax) = 0 here 54 testl $0xffffffff,4(%esp) / ZF <-- 1 iff lo_frac. = 0 55 / iff arg. is infinite 56 jnz .got_nan / no jump if arg. is infinite; 57 ret 58.got_nan: 59 movl $1,%eax / %eax was 0, must be made 1 to 60 / indicate TRUE 61 ret 62 .align 4 63 SET_SIZE(isnan) 64