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#include "libm_synonyms.h" 43 44 ENTRY(isnan) 45 movl 8(%esp),%eax / eax <-- hi_32(x) 46 andl $0x7fffffff,%eax / eax <-- hi_32(abs(x)) 47 subl $0x7ff00000,%eax / weed out finite values 48 jae .nan_or_inf / no jump if arg. is finite 49 movl $0,%eax / ansi needs (eax) = 0 50 ret 51.nan_or_inf: 52 ja .got_nan / no jump if arg. may be infinite; 53 / let nan waste time 54 / (eax) = 0 here 55 testl $0xffffffff,4(%esp) / ZF <-- 1 iff lo_frac. = 0 56 / iff arg. is infinite 57 jnz .got_nan / no jump if arg. is infinite; 58 ret 59.got_nan: 60 movl $1,%eax / %eax was 0, must be made 1 to 61 / indicate TRUE 62 ret 63 .align 4 64 SET_SIZE(isnan) 65