125c28e83SPiotr Jasiukajtis/* 225c28e83SPiotr Jasiukajtis * CDDL HEADER START 325c28e83SPiotr Jasiukajtis * 425c28e83SPiotr Jasiukajtis * The contents of this file are subject to the terms of the 525c28e83SPiotr Jasiukajtis * Common Development and Distribution License (the "License"). 625c28e83SPiotr Jasiukajtis * You may not use this file except in compliance with the License. 725c28e83SPiotr Jasiukajtis * 825c28e83SPiotr Jasiukajtis * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 925c28e83SPiotr Jasiukajtis * or http://www.opensolaris.org/os/licensing. 1025c28e83SPiotr Jasiukajtis * See the License for the specific language governing permissions 1125c28e83SPiotr Jasiukajtis * and limitations under the License. 1225c28e83SPiotr Jasiukajtis * 1325c28e83SPiotr Jasiukajtis * When distributing Covered Code, include this CDDL HEADER in each 1425c28e83SPiotr Jasiukajtis * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1525c28e83SPiotr Jasiukajtis * If applicable, add the following below this CDDL HEADER, with the 1625c28e83SPiotr Jasiukajtis * fields enclosed by brackets "[]" replaced with your own identifying 1725c28e83SPiotr Jasiukajtis * information: Portions Copyright [yyyy] [name of copyright owner] 1825c28e83SPiotr Jasiukajtis * 1925c28e83SPiotr Jasiukajtis * CDDL HEADER END 2025c28e83SPiotr Jasiukajtis */ 2125c28e83SPiotr Jasiukajtis/* 2225c28e83SPiotr Jasiukajtis * Copyright 2011 Nexenta Systems, Inc. All rights reserved. 2325c28e83SPiotr Jasiukajtis */ 2425c28e83SPiotr Jasiukajtis/* 2525c28e83SPiotr Jasiukajtis * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 2625c28e83SPiotr Jasiukajtis * Use is subject to license terms. 2725c28e83SPiotr Jasiukajtis */ 2825c28e83SPiotr Jasiukajtis 2925c28e83SPiotr Jasiukajtis .file "nextafter.S" 3025c28e83SPiotr Jasiukajtis 3125c28e83SPiotr Jasiukajtis#include "libm.h" 3225c28e83SPiotr JasiukajtisLIBM_ANSI_PRAGMA_WEAK(nextafter,function) 3325c28e83SPiotr Jasiukajtis .weak _nextafter 3425c28e83SPiotr Jasiukajtis .type _nextafter,#function 3525c28e83SPiotr Jasiukajtis_nextafter = __nextafter 3625c28e83SPiotr Jasiukajtis#include "libm_protos.h" 3725c28e83SPiotr Jasiukajtis 3825c28e83SPiotr Jasiukajtis RO_DATA 3925c28e83SPiotr Jasiukajtis .align 8 4025c28e83SPiotr Jasiukajtis.Lconstant: 4125c28e83SPiotr Jasiukajtistwo54 = 0x00 4225c28e83SPiotr Jasiukajtis .word 0x43500000,0x0 ! 2**54 4325c28e83SPiotr Jasiukajtistwom54 = 0x08 4425c28e83SPiotr Jasiukajtis .word 0x3c900000,0x0 ! 2**-54 4525c28e83SPiotr Jasiukajtistiny = 0x10 4625c28e83SPiotr Jasiukajtis .word 0x00100000,0x0 ! tiny 4725c28e83SPiotr Jasiukajtis 4825c28e83SPiotr Jasiukajtis! variable using fp 4925c28e83SPiotr Jasiukajtisx = -0x8 5025c28e83SPiotr Jasiukajtisy = -0x10 5125c28e83SPiotr Jasiukajtis 5225c28e83SPiotr Jasiukajtis ENTRY(nextafter) 5325c28e83SPiotr Jasiukajtis save %sp,-128,%sp 5425c28e83SPiotr Jasiukajtis PIC_SETUP(l7) 5525c28e83SPiotr Jasiukajtis std %i0,[%fp+x] 5625c28e83SPiotr Jasiukajtis or %g0,%i0,%o0 ! save original arguments 5725c28e83SPiotr Jasiukajtis or %g0,%i1,%o1 5825c28e83SPiotr Jasiukajtis std %i2,[%fp+y] 5925c28e83SPiotr Jasiukajtis or %g0,%i2,%o2 6025c28e83SPiotr Jasiukajtis or %g0,%i3,%o3 6125c28e83SPiotr Jasiukajtis ldd [%fp+x],%f2 ! x 6225c28e83SPiotr Jasiukajtis ldd [%fp+y],%f0 ! y 6325c28e83SPiotr Jasiukajtis fcmpd %f2,%f0 ! x:y 6425c28e83SPiotr Jasiukajtis PIC_SET(l7,.Lconstant,l0) 6525c28e83SPiotr Jasiukajtis sethi %hi(0x80000000),%l1 6625c28e83SPiotr Jasiukajtis andn %i0,%l1,%l4 6725c28e83SPiotr Jasiukajtis fbe 9f ! next_return 6825c28e83SPiotr Jasiukajtis nop 6925c28e83SPiotr Jasiukajtis fbu,a 9f ! next_return 7025c28e83SPiotr Jasiukajtis fmuld %f2,%f0,%f0 ! + -> * for Cheetah 7125c28e83SPiotr Jasiukajtis orcc %i1,%l4,%g0 ! see if x is zero 7225c28e83SPiotr Jasiukajtis bne 1f 7325c28e83SPiotr Jasiukajtis tst %i0 7425c28e83SPiotr Jasiukajtis ! x is zero, return sign(y)*min 7525c28e83SPiotr Jasiukajtis and %i2,%l1,%i0 7625c28e83SPiotr Jasiukajtis ba 4f ! next_final 7725c28e83SPiotr Jasiukajtis mov 1,%i1 7825c28e83SPiotr Jasiukajtis1: bge 2f 7925c28e83SPiotr Jasiukajtis nop 8025c28e83SPiotr Jasiukajtis ! x is negative 8125c28e83SPiotr Jasiukajtis fbl 1f ! next_subulp 8225c28e83SPiotr Jasiukajtis nop 8325c28e83SPiotr Jasiukajtis fbg 3f ! next_addulp 8425c28e83SPiotr Jasiukajtis nop 8525c28e83SPiotr Jasiukajtis2: 8625c28e83SPiotr Jasiukajtis fbl 3f ! next_addulp 8725c28e83SPiotr Jasiukajtis nop 8825c28e83SPiotr Jasiukajtis1: ! next_subulp 8925c28e83SPiotr Jasiukajtis subcc %i1,1,%i1 9025c28e83SPiotr Jasiukajtis ba 4f ! next_final 9125c28e83SPiotr Jasiukajtis subx %i0,0,%i0 9225c28e83SPiotr Jasiukajtis3: ! next_addulp 9325c28e83SPiotr Jasiukajtis addcc %i1,1,%i1 9425c28e83SPiotr Jasiukajtis addx %i0,0,%i0 9525c28e83SPiotr Jasiukajtis4: ! next_final 9625c28e83SPiotr Jasiukajtis sethi %hi(0x7ff00000),%l3 9725c28e83SPiotr Jasiukajtis std %i0,[%fp+x] 9825c28e83SPiotr Jasiukajtis andcc %i0,%l3,%i2 9925c28e83SPiotr Jasiukajtis be,a 1f ! xflow 10025c28e83SPiotr Jasiukajtis ldd [%l0+tiny],%f2 10125c28e83SPiotr Jasiukajtis cmp %i2,%l3 10225c28e83SPiotr Jasiukajtis bne,a 9f ! next_return 10325c28e83SPiotr Jasiukajtis ldd [%fp+x],%f0 104*1ec68d33SRichard Lowe call NAME(_SVID_libm_err) ! overflow 10525c28e83SPiotr Jasiukajtis or %g0,46,%o4 10625c28e83SPiotr Jasiukajtis ba 9f 10725c28e83SPiotr Jasiukajtis nop 10825c28e83SPiotr Jasiukajtis1: ! xflow 10925c28e83SPiotr Jasiukajtis fmuld %f2,%f2,%f2 11025c28e83SPiotr Jasiukajtis ldd [%fp+x],%f0 11125c28e83SPiotr Jasiukajtis9: ! next_return 11225c28e83SPiotr Jasiukajtis ret 11325c28e83SPiotr Jasiukajtis restore 11425c28e83SPiotr Jasiukajtis 11525c28e83SPiotr Jasiukajtis SET_SIZE(nextafter) 116