/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2011 Nexenta Systems, Inc. All rights reserved.
*/
/*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
.file "__vlogf.S"
#include "libm.h"
.align 64
#define y %o5
! register use
! i4 0x007fffff
! i5 0xfffc0000
! l3 0x7f800000
! o3 x
! o4 x
! o5 y
! o7 0x20000
! f2
! f4
! f6
! f8
! f9
! f10
! f12
! f14
! f16
! f18
! f19
! f20
! f22
! f24
! f26
! f40
! f42
! f44
! f46
! f48
! f50
! f52
! f54
! f56
! f58
! f60
! f62
! !!!!! Algorithm !!!!!
!
! float value;
! double K3 = -2.49850123953105416108e-01;
! double K2 = 3.33380614127478394992e-01;
! double K1 = -5.00000021234343492201e-01;
! double K0 = 9.99999998601683029714e-01;
! double LN2 = 6.931471805599452862e-01;
! double ZERO = 0;
! float INF;
!
! ival = *(int*)(x);
! *(float*)&*(float*)&exp = *(float*)(x);
! i = ival >> 14;
! ind = i & (-8);
! y[0] = (float)(yy);
! return;
!
!spec:
! return;
! } else if (ival <= 0) {
! y[0] = ((ival & 0x7fffffff) == 0) ?
! -1.0f / 0f. : 0f. /0f.; /* X = +-0 : X < 0 */
! return;
! } else { /* Denom. number */
! i = ival >> 14;
! ind = i & (-8);
! y[0] = (float)(yy);
! return;
! }
!--------------------------------------------------------------------
.begin:
.begin1:
.cont2:
.cont3:
.cont4:
.cont5:
.cont6:
.cont7:
.cont8:
.cont9:
.cont10:
.cont11:
.cont12:
.cont13:
.cont14:
.cont15:
.align 16
.cont16:
.cont17:
.cont18:
.cont19:
.cont20:
.cont21:
.cont22:
.cont23:
.tail:
.end_loop:
.end:
.align 16
.update2:
.align 16
.update3:
.align 16
.update4:
.align 16
.update5:
.align 16
.update6:
.align 16
.update7:
.align 16
.update8:
.align 16
.update9:
.align 16
.update10:
.align 16
.update11:
.align 16
.update12:
.align 16
.update13:
.align 16
.update14:
.align 16
.update15:
.align 16
.update16:
.align 16
.update17:
.align 16
.update18:
.align 16
.update19:
.align 16
.update20:
.align 16
.update21:
.align 16
.update22:
.align 16
.update23:
.align 16
.spec:
.align 16
.spec0:
.align 16
.spec1:
.align 16
.spec2: