.file "log1pl.s"


// Copyright (c) 2000 - 2003, Intel Corporation
// All rights reserved.
//
// Contributed 2000 by the Intel Numerics Group, Intel Corporation
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// * The name of Intel Corporation may not be used to endorse or promote
// products derived from this software without specific prior written
// permission.

// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Intel Corporation is the author of this code, and requests that all
// problem reports or change requests be submitted to it directly at
// http://www.intel.com/software/products/opensource/libraries/num.htm.
//
//*********************************************************************
//
// History:
// 02/02/00 Initial version
// 04/04/00 Unwind support added
// 08/15/00 Bundle added after call to __libm_error_support to properly
//          set [the previously overwritten] GR_Parameter_RESULT.
// 05/21/01 Removed logl and log10l, putting them in a separate file
// 06/29/01 Improved speed of all paths
// 05/20/02 Cleaned up namespace and sf0 syntax
// 02/10/03 Reordered header: .section, .global, .proc, .align;
//          used data8 for long double table values
//
//*********************************************************************
//
//*********************************************************************
//
// Function:   log1pl(x) = ln(x+1), for double-extended precision x values
//
//*********************************************************************
//
// Resources Used:
//
//    Floating-Point Registers: f8 (Input and Return Value)
//                              f34-f82
//
//    General Purpose Registers:
//      r32-r56
//      r53-r56 (Used to pass arguments to error handling routine)
//
//    Predicate Registers:      p6-p13
//
//*********************************************************************
//
// IEEE Special Conditions:
//
//    Denormal fault raised on denormal inputs
//    Overflow exceptions cannot occur
//    Underflow exceptions raised when appropriate for log1p
//    Inexact raised when appropriate by algorithm
//
//    log1pl(inf) = inf
//    log1pl(-inf) = QNaN
//    log1pl(+/-0) = +/-0
//    log1pl(-1) =  -inf
//    log1pl(SNaN) = QNaN
//    log1pl(QNaN) = QNaN
//    log1pl(EM_special Values) = QNaN
//
//*********************************************************************
//
// Overview
//
// The method consists of three cases.
//
// If      |X| < 2^(-80)	use case log1p_small;
// else    |X| < 2^(-7)	        use case log_near1;
// else      			use case log_regular;
//
// Case log1p_small:
//
//   log1pl( X ) = logl( X+1 ) can be approximated by X
//
// Case log_near1:
//
//   log1pl( X ) = log( X+1 ) can be approximated by a simple polynomial
//   in W = X. This polynomial resembles the truncated Taylor
//   series W - W^/2 + W^3/3 - ...
//
// Case log_regular:
//
//   Here we use a table lookup method. The basic idea is that in
//   order to compute logl(Arg) = log1pl (Arg-1) for an argument Arg in [1,2),
//   we construct a value G such that G*Arg is close to 1 and that
//   logl(1/G) is obtainable easily from a table of values calculated
//   beforehand. Thus
//
//      logl(Arg) = logl(1/G) + logl(G*Arg)
//      	 = logl(1/G) + logl(1 + (G*Arg - 1))
//
//   Because |G*Arg - 1| is small, the second term on the right hand
//   side can be approximated by a short polynomial. We elaborate
//   this method in four steps.
//
//   Step 0: Initialization
//
//   We need to calculate logl( X+1 ). Obtain N, S_hi such that
//
//      X+1 = 2^N * ( S_hi + S_lo )   exactly
//
//   where S_hi in [1,2) and S_lo is a correction to S_hi in the sense
//   that |S_lo| <= ulp(S_hi).
//
//   Step 1: Argument Reduction
//
//   Based on S_hi, obtain G_1, G_2, G_3 from a table and calculate
//
//      G := G_1 * G_2 * G_3
//      r := (G * S_hi - 1) + G * S_lo
//
//   These G_j's have the property that the product is exactly
//   representable and that |r| < 2^(-12) as a result.
//
//   Step 2: Approximation
//
//
//   logl(1 + r) is approximated by a short polynomial poly(r).
//
//   Step 3: Reconstruction
//
//
//   Finally, log1pl( X ) = logl( X+1 ) is given by
//
//   logl( X+1 )   =   logl( 2^N * (S_hi + S_lo) )
//                 ~=~  N*logl(2) + logl(1/G) + logl(1 + r)
//                 ~=~  N*logl(2) + logl(1/G) + poly(r).
//
// **** Algorithm ****
//
// Case log1p_small:
//
// Although log1pl(X) is basically X, we would like to preserve the inexactness
// nature as well as consistent behavior under different rounding modes.
// We can do this by computing the result as
//
//     log1pl(X) = X - X*X
//
//
// Case log_near1:
//
// Here we compute a simple polynomial. To exploit parallelism, we split
// the polynomial into two portions.
//
//       W := X
//       Wsq := W * W
//       W4  := Wsq*Wsq
//       W6  := W4*Wsq
//       Y_hi := W + Wsq*(P_1 + W*(P_2 + W*(P_3 + W*P_4))
//       Y_lo := W6*(P_5 + W*(P_6 + W*(P_7 + W*P_8)))
//
// Case log_regular:
//
// We present the algorithm in four steps.
//
//   Step 0. Initialization
//   ----------------------
//
//   Z := X + 1
//   N := unbaised exponent of Z
//   S_hi := 2^(-N) * Z
//   S_lo := 2^(-N) * { (max(X,1)-Z) + min(X,1) }
//
//   Step 1. Argument Reduction
//   --------------------------
//
//   Let
//
//      Z = 2^N * S_hi = 2^N * 1.d_1 d_2 d_3 ... d_63
//
//   We obtain G_1, G_2, G_3 by the following steps.
//
//
//      Define		X_0 := 1.d_1 d_2 ... d_14. This is extracted
//      		from S_hi.
//
//      Define		A_1 := 1.d_1 d_2 d_3 d_4. This is X_0 truncated
//      		to lsb = 2^(-4).
//
//      Define		index_1 := [ d_1 d_2 d_3 d_4 ].
//
//      Fetch 		Z_1 := (1/A_1) rounded UP in fixed point with
//      fixed point	lsb = 2^(-15).
//      		Z_1 looks like z_0.z_1 z_2 ... z_15
//      	        Note that the fetching is done using index_1.
//      		A_1 is actually not needed in the implementation
//      		and is used here only to explain how is the value
//      		Z_1 defined.
//
//      Fetch		G_1 := (1/A_1) truncated to 21 sig. bits.
//      floating pt.	Again, fetching is done using index_1. A_1
//      		explains how G_1 is defined.
//
//      Calculate	X_1 := X_0 * Z_1 truncated to lsb = 2^(-14)
//      		     = 1.0 0 0 0 d_5 ... d_14
//      		This is accomplished by integer multiplication.
//      		It is proved that X_1 indeed always begin
//      		with 1.0000 in fixed point.
//
//
//      Define		A_2 := 1.0 0 0 0 d_5 d_6 d_7 d_8. This is X_1
//      		truncated to lsb = 2^(-8). Similar to A_1,
//      		A_2 is not needed in actual implementation. It
//      		helps explain how some of the values are defined.
//
//      Define		index_2 := [ d_5 d_6 d_7 d_8 ].
//
//      Fetch 		Z_2 := (1/A_2) rounded UP in fixed point with
//      fixed point	lsb = 2^(-15). Fetch done using index_2.
//      		Z_2 looks like z_0.z_1 z_2 ... z_15
//
//      Fetch		G_2 := (1/A_2) truncated to 21 sig. bits.
//      floating pt.
//
//      Calculate	X_2 := X_1 * Z_2 truncated to lsb = 2^(-14)
//      		     = 1.0 0 0 0 0 0 0 0 d_9 d_10 ... d_14
//      		This is accomplished by integer multiplication.
//      		It is proved that X_2 indeed always begin
//      		with 1.00000000 in fixed point.
//
//
//      Define		A_3 := 1.0 0 0 0 0 0 0 0 d_9 d_10 d_11 d_12 d_13 1.
//      		This is 2^(-14) + X_2 truncated to lsb = 2^(-13).
//
//      Define		index_3 := [ d_9 d_10 d_11 d_12 d_13 ].
//
//      Fetch		G_3 := (1/A_3) truncated to 21 sig. bits.
//      floating pt.	Fetch is done using index_3.
//
//      Compute		G := G_1 * G_2 * G_3.
//
//      This is done exactly since each of G_j only has 21 sig. bits.
//
//      Compute
//
//      	r := (G*S_hi - 1) + G*S_lo using 2 FMA operations.
//
//      Thus r approximates G*(S_hi + S_lo) - 1 to within a couple of
//      rounding errors.
//
//
//  Step 2. Approximation
//  ---------------------
//
//   This step computes an approximation to logl( 1 + r ) where r is the
//   reduced argument just obtained. It is proved that |r| <= 1.9*2^(-13);
//   thus logl(1+r) can be approximated by a short polynomial:
//
//      logl(1+r) ~=~ poly = r + Q1 r^2 + ... + Q4 r^5
//
//
//  Step 3. Reconstruction
//  ----------------------
//
//   This step computes the desired result of logl(X+1):
//
//      logl(X+1) =   logl( 2^N * (S_hi + S_lo) )
//      	  =   N*logl(2) + logl( S_hi + S_lo) )
//      	  =   N*logl(2) + logl(1/G) +
//      	      logl(1 + G * ( S_hi + S_lo ) - 1 )
//
//   logl(2), logl(1/G_j) are stored as pairs of (single,double) numbers:
//   log2_hi, log2_lo, log1byGj_hi, log1byGj_lo. The high parts are
//   single-precision numbers and the low parts are double precision
//   numbers. These have the property that
//
//      N*log2_hi + SUM ( log1byGj_hi )
//
//   is computable exactly in double-extended precision (64 sig. bits).
//   Finally
//
//      Y_hi := N*log2_hi + SUM ( log1byGj_hi )
//      Y_lo := poly_hi + [ poly_lo +
//              ( SUM ( log1byGj_lo ) + N*log2_lo ) ]
//

RODATA
.align 64

// ************* DO NOT CHANGE THE ORDER OF THESE TABLES *************

// P_8, P_7, P_6, P_5, P_4, P_3, P_2, and P_1

LOCAL_OBJECT_START(Constants_P)
//data4  0xEFD62B15,0xE3936754,0x00003FFB,0x00000000
//data4  0xA5E56381,0x8003B271,0x0000BFFC,0x00000000
//data4  0x73282DB0,0x9249248C,0x00003FFC,0x00000000
//data4  0x47305052,0xAAAAAA9F,0x0000BFFC,0x00000000
//data4  0xCCD17FC9,0xCCCCCCCC,0x00003FFC,0x00000000
//data4  0x00067ED5,0x80000000,0x0000BFFD,0x00000000
//data4  0xAAAAAAAA,0xAAAAAAAA,0x00003FFD,0x00000000
//data4  0xFFFFFFFE,0xFFFFFFFF,0x0000BFFD,0x00000000
data8  0xE3936754EFD62B15,0x00003FFB
data8  0x8003B271A5E56381,0x0000BFFC
data8  0x9249248C73282DB0,0x00003FFC
data8  0xAAAAAA9F47305052,0x0000BFFC
data8  0xCCCCCCCCCCD17FC9,0x00003FFC
data8  0x8000000000067ED5,0x0000BFFD
data8  0xAAAAAAAAAAAAAAAA,0x00003FFD
data8  0xFFFFFFFFFFFFFFFE,0x0000BFFD
LOCAL_OBJECT_END(Constants_P)

// log2_hi, log2_lo, Q_4, Q_3, Q_2, and Q_1

LOCAL_OBJECT_START(Constants_Q)
//data4  0x00000000,0xB1721800,0x00003FFE,0x00000000
//data4  0x4361C4C6,0x82E30865,0x0000BFE2,0x00000000
//data4  0x328833CB,0xCCCCCAF2,0x00003FFC,0x00000000
//data4  0xA9D4BAFB,0x80000077,0x0000BFFD,0x00000000
//data4  0xAAABE3D2,0xAAAAAAAA,0x00003FFD,0x00000000
//data4  0xFFFFDAB7,0xFFFFFFFF,0x0000BFFD,0x00000000
data8  0xB172180000000000,0x00003FFE
data8  0x82E308654361C4C6,0x0000BFE2
data8  0xCCCCCAF2328833CB,0x00003FFC
data8  0x80000077A9D4BAFB,0x0000BFFD
data8  0xAAAAAAAAAAABE3D2,0x00003FFD
data8  0xFFFFFFFFFFFFDAB7,0x0000BFFD
LOCAL_OBJECT_END(Constants_Q)

// 1/ln10_hi, 1/ln10_lo

LOCAL_OBJECT_START(Constants_1_by_LN10)
//data4  0x37287195,0xDE5BD8A9,0x00003FFD,0x00000000
//data4  0xACCF70C8,0xD56EAABE,0x00003FBB,0x00000000
data8  0xDE5BD8A937287195,0x00003FFD
data8  0xD56EAABEACCF70C8,0x00003FBB
LOCAL_OBJECT_END(Constants_1_by_LN10)


// Z1 - 16 bit fixed

LOCAL_OBJECT_START(Constants_Z_1)
data4  0x00008000
data4  0x00007879
data4  0x000071C8
data4  0x00006BCB
data4  0x00006667
data4  0x00006187
data4  0x00005D18
data4  0x0000590C
data4  0x00005556
data4  0x000051EC
data4  0x00004EC5
data4  0x00004BDB
data4  0x00004925
data4  0x0000469F
data4  0x00004445
data4  0x00004211
LOCAL_OBJECT_END(Constants_Z_1)

// G1 and H1 - IEEE single and h1 - IEEE double

LOCAL_OBJECT_START(Constants_G_H_h1)
data4  0x3F800000,0x00000000
data8  0x0000000000000000
data4  0x3F70F0F0,0x3D785196
data8  0x3DA163A6617D741C
data4  0x3F638E38,0x3DF13843
data8  0x3E2C55E6CBD3D5BB
data4  0x3F579430,0x3E2FF9A0
data8  0xBE3EB0BFD86EA5E7
data4  0x3F4CCCC8,0x3E647FD6
data8  0x3E2E6A8C86B12760
data4  0x3F430C30,0x3E8B3AE7
data8  0x3E47574C5C0739BA
data4  0x3F3A2E88,0x3EA30C68
data8  0x3E20E30F13E8AF2F
data4  0x3F321640,0x3EB9CEC8
data8  0xBE42885BF2C630BD
data4  0x3F2AAAA8,0x3ECF9927
data8  0x3E497F3497E577C6
data4  0x3F23D708,0x3EE47FC5
data8  0x3E3E6A6EA6B0A5AB
data4  0x3F1D89D8,0x3EF8947D
data8  0xBDF43E3CD328D9BE
data4  0x3F17B420,0x3F05F3A1
data8  0x3E4094C30ADB090A
data4  0x3F124920,0x3F0F4303
data8  0xBE28FBB2FC1FE510
data4  0x3F0D3DC8,0x3F183EBF
data8  0x3E3A789510FDE3FA
data4  0x3F088888,0x3F20EC80
data8  0x3E508CE57CC8C98F
data4  0x3F042108,0x3F29516A
data8  0xBE534874A223106C
LOCAL_OBJECT_END(Constants_G_H_h1)

// Z2 - 16 bit fixed

LOCAL_OBJECT_START(Constants_Z_2)
data4  0x00008000
data4  0x00007F81
data4  0x00007F02
data4  0x00007E85
data4  0x00007E08
data4  0x00007D8D
data4  0x00007D12
data4  0x00007C98
data4  0x00007C20
data4  0x00007BA8
data4  0x00007B31
data4  0x00007ABB
data4  0x00007A45
data4  0x000079D1
data4  0x0000795D
data4  0x000078EB
LOCAL_OBJECT_END(Constants_Z_2)

// G2 and H2 - IEEE single and h2 - IEEE double

LOCAL_OBJECT_START(Constants_G_H_h2)
data4  0x3F800000,0x00000000
data8  0x0000000000000000
data4  0x3F7F00F8,0x3B7F875D
data8  0x3DB5A11622C42273
data4  0x3F7E03F8,0x3BFF015B
data8  0x3DE620CF21F86ED3
data4  0x3F7D08E0,0x3C3EE393
data8  0xBDAFA07E484F34ED
data4  0x3F7C0FC0,0x3C7E0586
data8  0xBDFE07F03860BCF6
data4  0x3F7B1880,0x3C9E75D2
data8  0x3DEA370FA78093D6
data4  0x3F7A2328,0x3CBDC97A
data8  0x3DFF579172A753D0
data4  0x3F792FB0,0x3CDCFE47
data8  0x3DFEBE6CA7EF896B
data4  0x3F783E08,0x3CFC15D0
data8  0x3E0CF156409ECB43
data4  0x3F774E38,0x3D0D874D
data8  0xBE0B6F97FFEF71DF
data4  0x3F766038,0x3D1CF49B
data8  0xBE0804835D59EEE8
data4  0x3F757400,0x3D2C531D
data8  0x3E1F91E9A9192A74
data4  0x3F748988,0x3D3BA322
data8  0xBE139A06BF72A8CD
data4  0x3F73A0D0,0x3D4AE46F
data8  0x3E1D9202F8FBA6CF
data4  0x3F72B9D0,0x3D5A1756
data8  0xBE1DCCC4BA796223
data4  0x3F71D488,0x3D693B9D
data8  0xBE049391B6B7C239
LOCAL_OBJECT_END(Constants_G_H_h2)

// G3 and H3 - IEEE single and h3 - IEEE double

LOCAL_OBJECT_START(Constants_G_H_h3)
data4  0x3F7FFC00,0x38800100
data8  0x3D355595562224CD
data4  0x3F7FF400,0x39400480
data8  0x3D8200A206136FF6
data4  0x3F7FEC00,0x39A00640
data8  0x3DA4D68DE8DE9AF0
data4  0x3F7FE400,0x39E00C41
data8  0xBD8B4291B10238DC
data4  0x3F7FDC00,0x3A100A21
data8  0xBD89CCB83B1952CA
data4  0x3F7FD400,0x3A300F22
data8  0xBDB107071DC46826
data4  0x3F7FCC08,0x3A4FF51C
data8  0x3DB6FCB9F43307DB
data4  0x3F7FC408,0x3A6FFC1D
data8  0xBD9B7C4762DC7872
data4  0x3F7FBC10,0x3A87F20B
data8  0xBDC3725E3F89154A
data4  0x3F7FB410,0x3A97F68B
data8  0xBD93519D62B9D392
data4  0x3F7FAC18,0x3AA7EB86
data8  0x3DC184410F21BD9D
data4  0x3F7FA420,0x3AB7E101
data8  0xBDA64B952245E0A6
data4  0x3F7F9C20,0x3AC7E701
data8  0x3DB4B0ECAABB34B8
data4  0x3F7F9428,0x3AD7DD7B
data8  0x3D9923376DC40A7E
data4  0x3F7F8C30,0x3AE7D474
data8  0x3DC6E17B4F2083D3
data4  0x3F7F8438,0x3AF7CBED
data8  0x3DAE314B811D4394
data4  0x3F7F7C40,0x3B03E1F3
data8  0xBDD46F21B08F2DB1
data4  0x3F7F7448,0x3B0BDE2F
data8  0xBDDC30A46D34522B
data4  0x3F7F6C50,0x3B13DAAA
data8  0x3DCB0070B1F473DB
data4  0x3F7F6458,0x3B1BD766
data8  0xBDD65DDC6AD282FD
data4  0x3F7F5C68,0x3B23CC5C
data8  0xBDCDAB83F153761A
data4  0x3F7F5470,0x3B2BC997
data8  0xBDDADA40341D0F8F
data4  0x3F7F4C78,0x3B33C711
data8  0x3DCD1BD7EBC394E8
data4  0x3F7F4488,0x3B3BBCC6
data8  0xBDC3532B52E3E695
data4  0x3F7F3C90,0x3B43BAC0
data8  0xBDA3961EE846B3DE
data4  0x3F7F34A0,0x3B4BB0F4
data8  0xBDDADF06785778D4
data4  0x3F7F2CA8,0x3B53AF6D
data8  0x3DCC3ED1E55CE212
data4  0x3F7F24B8,0x3B5BA620
data8  0xBDBA31039E382C15
data4  0x3F7F1CC8,0x3B639D12
data8  0x3D635A0B5C5AF197
data4  0x3F7F14D8,0x3B6B9444
data8  0xBDDCCB1971D34EFC
data4  0x3F7F0CE0,0x3B7393BC
data8  0x3DC7450252CD7ADA
data4  0x3F7F04F0,0x3B7B8B6D
data8  0xBDB68F177D7F2A42
LOCAL_OBJECT_END(Constants_G_H_h3)


// Floating Point Registers

FR_Input_X      = f8

FR_Y_hi         = f34
FR_Y_lo         = f35

FR_Scale        = f36
FR_X_Prime      = f37
FR_S_hi         = f38
FR_W            = f39
FR_G            = f40

FR_H            = f41
FR_wsq          = f42
FR_w4           = f43
FR_h            = f44
FR_w6           = f45

FR_G2           = f46
FR_H2           = f47
FR_poly_lo      = f48
FR_P8           = f49
FR_poly_hi      = f50

FR_P7           = f51
FR_h2           = f52
FR_rsq          = f53
FR_P6           = f54
FR_r            = f55

FR_log2_hi      = f56
FR_log2_lo      = f57
FR_p87          = f58
FR_p876         = f58
FR_p8765        = f58
FR_float_N      = f59
FR_Q4           = f60

FR_p43          = f61
FR_p432         = f61
FR_p4321        = f61
FR_P4           = f62
FR_G3           = f63
FR_H3           = f64
FR_h3           = f65

FR_Q3           = f66
FR_P3           = f67
FR_Q2           = f68
FR_P2           = f69
FR_1LN10_hi     = f70

FR_Q1           = f71
FR_P1           = f72
FR_1LN10_lo     = f73
FR_P5           = f74
FR_rcub         = f75

FR_Output_X_tmp = f76
FR_Neg_One      = f77
FR_Z            = f78
FR_AA           = f79
FR_BB           = f80
FR_S_lo         = f81
FR_2_to_minus_N = f82

FR_X                = f8
FR_Y                = f0
FR_RESULT           = f76


// General Purpose Registers

GR_ad_p         = r33
GR_Index1       = r34
GR_Index2       = r35
GR_signif       = r36
GR_X_0          = r37
GR_X_1          = r38
GR_X_2          = r39
GR_minus_N      = r39
GR_Z_1          = r40
GR_Z_2          = r41
GR_N            = r42
GR_Bias         = r43
GR_M            = r44
GR_Index3       = r45
GR_exp_2tom80   = r45
GR_ad_p2        = r46
GR_exp_mask     = r47
GR_exp_2tom7    = r48
GR_ad_ln10      = r49
GR_ad_tbl_1     = r50
GR_ad_tbl_2     = r51
GR_ad_tbl_3     = r52
GR_ad_q         = r53
GR_ad_z_1       = r54
GR_ad_z_2       = r55
GR_ad_z_3       = r56
GR_minus_N      = r39

//
// Added for unwind support
//

GR_SAVE_PFS         = r50
GR_SAVE_B0          = r51
GR_SAVE_GP          = r52
GR_Parameter_X      = r53
GR_Parameter_Y      = r54
GR_Parameter_RESULT = r55
GR_Parameter_TAG    = r56

.section .text
GLOBAL_IEEE754_ENTRY(log1pl)
{ .mfi
      alloc r32 = ar.pfs,0,21,4,0
      fclass.m p6, p0 =  FR_Input_X, 0x1E3  // Test for natval, nan, inf
      nop.i 999
}
{ .mfi
      addl GR_ad_z_1 = @ltoff(Constants_Z_1#),gp
      fma.s1 FR_Z = FR_Input_X, f1, f1      // x+1
      nop.i 999
}
;;

{ .mfi
      nop.m 999
      fmerge.ns FR_Neg_One = f1, f1         // Form -1.0
      nop.i 999
}
{ .mfi
      nop.m 999
      fnorm.s1 FR_X_Prime = FR_Input_X      // Normalize x
      nop.i 999
}
;;

{ .mfi
      ld8    GR_ad_z_1 = [GR_ad_z_1]          // Get pointer to Constants_Z_1
      nop.f 999
      mov GR_exp_2tom7 = 0x0fff8              // Exponent of 2^-7
}
;;

{ .mfb
      getf.sig GR_signif = FR_Z               // Get significand of x+1
      fcmp.eq.s1 p9, p0 =  FR_Input_X, f0     // Test for x=0
(p6)  br.cond.spnt LOG1P_special              // Branch for nan, inf, natval
}
;;

{ .mfi
      add   GR_ad_tbl_1 = 0x040, GR_ad_z_1    // Point to Constants_G_H_h1
      fcmp.lt.s1 p13, p0 =  FR_X_Prime, FR_Neg_One // Test for x<-1
      add   GR_ad_p = -0x100, GR_ad_z_1       // Point to Constants_P
}
{ .mfi
      add   GR_ad_z_2 = 0x140, GR_ad_z_1      // Point to Constants_Z_2
      nop.f 999
      add   GR_ad_tbl_2 = 0x180, GR_ad_z_1    // Point to Constants_G_H_h2
}
;;

{ .mfi
      add   GR_ad_q = 0x080, GR_ad_p          // Point to Constants_Q
      fcmp.eq.s1 p8, p0 =  FR_X_Prime, FR_Neg_One // Test for x=-1
      extr.u GR_Index1 = GR_signif, 59, 4     // Get high 4 bits of signif
}
{ .mfb
      add   GR_ad_tbl_3 = 0x280, GR_ad_z_1    // Point to Constants_G_H_h3
      nop.f 999
(p9)  br.ret.spnt  b0                         // Exit if x=0, return input
}
;;

{ .mfi
      shladd GR_ad_z_1 = GR_Index1, 2, GR_ad_z_1  // Point to Z_1
      fclass.nm p10, p0 =  FR_Input_X, 0x1FF  // Test for unsupported
      extr.u GR_X_0 = GR_signif, 49, 15       // Get high 15 bits of significand
}
{ .mfi
      ldfe FR_P8 = [GR_ad_p],16               // Load P_8 for near1 path
      fsub.s1 FR_W = FR_X_Prime, f0           // W = x
      add   GR_ad_ln10 = 0x060, GR_ad_q       // Point to Constants_1_by_LN10
}
;;

{ .mfi
      ld4 GR_Z_1 = [GR_ad_z_1]                // Load Z_1
      fmax.s1  FR_AA = FR_X_Prime, f1         // For S_lo, form AA = max(X,1.0)
      mov GR_exp_mask = 0x1FFFF               // Create exponent mask
}
{ .mib
      shladd GR_ad_tbl_1 = GR_Index1, 4, GR_ad_tbl_1  // Point to G_1
      mov GR_Bias = 0x0FFFF                   // Create exponent bias
(p13) br.cond.spnt LOG1P_LT_Minus_1           // Branch if x<-1
}
;;

{ .mfb
      ldfps  FR_G, FR_H = [GR_ad_tbl_1],8     // Load G_1, H_1
      fmerge.se FR_S_hi =  f1,FR_Z            // Form |x+1|
(p8)  br.cond.spnt LOG1P_EQ_Minus_1           // Branch if x=-1
}
;;

{ .mmb
      getf.exp GR_N =  FR_Z                   // Get N = exponent of x+1
      ldfd  FR_h = [GR_ad_tbl_1]              // Load h_1
(p10) br.cond.spnt LOG1P_unsupported          // Branch for unsupported type
}
;;

{ .mfi
      ldfe FR_log2_hi = [GR_ad_q],16          // Load log2_hi
      fcmp.eq.s0 p8, p0 =  FR_Input_X, f0     // Dummy op to flag denormals
      pmpyshr2.u GR_X_1 = GR_X_0,GR_Z_1,15    // Get bits 30-15 of X_0 * Z_1
}
;;

//
//    For performance, don't use result of pmpyshr2.u for 4 cycles.
//
{ .mmi
      ldfe FR_log2_lo = [GR_ad_q],16          // Load log2_lo
      sub GR_N = GR_N, GR_Bias
      mov GR_exp_2tom80 = 0x0ffaf             // Exponent of 2^-80
}
;;

{ .mfi
      ldfe FR_Q4 = [GR_ad_q],16               // Load Q4
      fms.s1  FR_S_lo = FR_AA, f1, FR_Z       // Form S_lo = AA - Z
      sub GR_minus_N = GR_Bias, GR_N          // Form exponent of 2^(-N)
}
;;

{ .mmf
      ldfe FR_Q3 = [GR_ad_q],16               // Load Q3
      setf.sig FR_float_N = GR_N   // Put integer N into rightmost significand
      fmin.s1  FR_BB = FR_X_Prime, f1         // For S_lo, form BB = min(X,1.0)
}
;;

{ .mmi
      getf.exp GR_M = FR_W                    // Get signexp of w = x
      ldfe FR_Q2 = [GR_ad_q],16               // Load Q2
      extr.u GR_Index2 = GR_X_1, 6, 4         // Extract bits 6-9 of X_1
}
;;

{ .mmi
      ldfe FR_Q1 = [GR_ad_q]                  // Load Q1
      shladd GR_ad_z_2 = GR_Index2, 2, GR_ad_z_2  // Point to Z_2
      add GR_ad_p2  = 0x30,GR_ad_p            // Point to P_4
}
;;

{ .mmi
      ld4 GR_Z_2 = [GR_ad_z_2]                // Load Z_2
      shladd GR_ad_tbl_2 = GR_Index2, 4, GR_ad_tbl_2  // Point to G_2
      and GR_M = GR_exp_mask, GR_M            // Get exponent of w = x
}
;;

{ .mmi
      ldfps  FR_G2, FR_H2 = [GR_ad_tbl_2],8   // Load G_2, H_2
      cmp.lt  p8, p9 =  GR_M, GR_exp_2tom7    // Test |x| < 2^-7
      cmp.lt  p7, p0 =  GR_M, GR_exp_2tom80   // Test |x| < 2^-80
}
;;

// Small path is separate code
//  p7 is for the small path: |x| < 2^-80
// near1 and regular paths are merged.
//  p8 is for the near1 path: |x| < 2^-7
//  p9 is for regular path:   |x| >= 2^-7

{ .mfi
      ldfd  FR_h2 = [GR_ad_tbl_2]             // Load h_2
      nop.f 999
      nop.i 999
}
{ .mfb
(p9)  setf.exp FR_2_to_minus_N = GR_minus_N   // Form 2^(-N)
(p7)  fnma.s0  f8 = FR_X_Prime, FR_X_Prime, FR_X_Prime // Result x - x*x
(p7)  br.ret.spnt  b0                         // Branch if |x| < 2^-80
}
;;

{ .mmi
(p8)  ldfe FR_P7 = [GR_ad_p],16               // Load P_7 for near1 path
(p8)  ldfe FR_P4 = [GR_ad_p2],16              // Load P_4 for near1 path
(p9)  pmpyshr2.u GR_X_2 = GR_X_1,GR_Z_2,15    // Get bits 30-15 of X_1 * Z_2
}
;;

//
//    For performance, don't use result of pmpyshr2.u for 4 cycles.
//
{ .mmf
(p8)  ldfe FR_P6 = [GR_ad_p],16               // Load P_6 for near1 path
(p8)  ldfe FR_P3 = [GR_ad_p2],16              // Load P_3 for near1 path
(p9)  fma.s1  FR_S_lo = FR_S_lo, f1, FR_BB    // S_lo = S_lo + BB
}
;;

{ .mmf
(p8)  ldfe FR_P5 = [GR_ad_p],16               // Load P_5 for near1 path
(p8)  ldfe FR_P2 = [GR_ad_p2],16              // Load P_2 for near1 path
(p8)  fmpy.s1 FR_wsq = FR_W, FR_W             // wsq = w * w for near1 path
}
;;

{ .mmi
(p8)  ldfe FR_P1 = [GR_ad_p2],16 ;;           // Load P_1 for near1 path
      nop.m 999
(p9)  extr.u GR_Index3 = GR_X_2, 1, 5         // Extract bits 1-5 of X_2
}
;;

{ .mfi
(p9)  shladd GR_ad_tbl_3 = GR_Index3, 4, GR_ad_tbl_3  // Point to G_3
(p9)  fcvt.xf FR_float_N = FR_float_N
      nop.i 999
}
;;

{ .mfi
(p9)  ldfps  FR_G3, FR_H3 = [GR_ad_tbl_3],8   // Load G_3, H_3
      nop.f 999
      nop.i 999
}
;;

{ .mfi
(p9)  ldfd  FR_h3 = [GR_ad_tbl_3]             // Load h_3
(p9)  fmpy.s1 FR_G = FR_G, FR_G2              // G = G_1 * G_2
      nop.i 999
}
{ .mfi
      nop.m 999
(p9)  fadd.s1 FR_H = FR_H, FR_H2              // H = H_1 + H_2
      nop.i 999
}
;;

{ .mmf
      nop.m 999
      nop.m 999
(p9)  fadd.s1 FR_h = FR_h, FR_h2              // h = h_1 + h_2
}
;;

{ .mfi
      nop.m 999
(p8)  fmpy.s1 FR_w4 = FR_wsq, FR_wsq          // w4 = w^4 for near1 path
      nop.i 999
}
{ .mfi
      nop.m 999
(p8)  fma.s1 FR_p87 = FR_W, FR_P8, FR_P7      // p87 = w * P8 + P7
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1  FR_S_lo = FR_S_lo, FR_2_to_minus_N, f0 // S_lo = S_lo * 2^(-N)
      nop.i 999
}
{ .mfi
      nop.m 999
(p8)  fma.s1 FR_p43 = FR_W, FR_P4, FR_P3      // p43 = w * P4 + P3
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fmpy.s1 FR_G = FR_G, FR_G3              // G = (G_1 * G_2) * G_3
      nop.i 999
}
{ .mfi
      nop.m 999
(p9)  fadd.s1 FR_H = FR_H, FR_H3              // H = (H_1 + H_2) + H_3
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fadd.s1 FR_h = FR_h, FR_h3              // h = (h_1 + h_2) + h_3
      nop.i 999
}
{ .mfi
      nop.m 999
(p8)  fmpy.s1 FR_w6 = FR_w4, FR_wsq           // w6 = w^6 for near1 path
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p8)  fma.s1 FR_p432 = FR_W, FR_p43, FR_P2    // p432 = w * p43 + P2
      nop.i 999
}
{ .mfi
      nop.m 999
(p8)  fma.s1 FR_p876 = FR_W, FR_p87, FR_P6    // p876 = w * p87 + P6
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fms.s1 FR_r = FR_G, FR_S_hi, f1         // r = G * S_hi - 1
      nop.i 999
}
{ .mfi
      nop.m 999
(p9)  fma.s1 FR_Y_hi = FR_float_N, FR_log2_hi, FR_H // Y_hi = N * log2_hi + H
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1 FR_h = FR_float_N, FR_log2_lo, FR_h  // h = N * log2_lo + h
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1 FR_r = FR_G, FR_S_lo, FR_r        // r = G * S_lo + (G * S_hi - 1)
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p8)  fma.s1 FR_p4321 = FR_W, FR_p432, FR_P1      // p4321 = w * p432 + P1
      nop.i 999
}
{ .mfi
      nop.m 999
(p8)  fma.s1 FR_p8765 = FR_W, FR_p876, FR_P5      // p8765 = w * p876 + P5
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1 FR_poly_lo = FR_r, FR_Q4, FR_Q3      // poly_lo = r * Q4 + Q3
      nop.i 999
}
{ .mfi
      nop.m 999
(p9)  fmpy.s1 FR_rsq = FR_r, FR_r                 // rsq = r * r
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p8)  fma.s1 FR_Y_lo = FR_wsq, FR_p4321, f0       // Y_lo = wsq * p4321
      nop.i 999
}
{ .mfi
      nop.m 999
(p8)  fma.s1 FR_Y_hi = FR_W, f1, f0               // Y_hi = w for near1 path
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1 FR_poly_lo = FR_poly_lo, FR_r, FR_Q2 // poly_lo = poly_lo * r + Q2
      nop.i 999
}
{ .mfi
      nop.m 999
(p9)  fma.s1 FR_rcub = FR_rsq, FR_r, f0           // rcub = r^3
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p8)  fma.s1 FR_Y_lo = FR_w6, FR_p8765,FR_Y_lo // Y_lo = w6 * p8765 + w2 * p4321
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1 FR_poly_hi = FR_Q1, FR_rsq, FR_r     // poly_hi = Q1 * rsq + r
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fma.s1 FR_poly_lo = FR_poly_lo, FR_rcub, FR_h // poly_lo = poly_lo*r^3 + h
      nop.i 999
}
;;

{ .mfi
      nop.m 999
(p9)  fadd.s1 FR_Y_lo = FR_poly_hi, FR_poly_lo    // Y_lo = poly_hi + poly_lo
      nop.i 999
}
;;

// Remainder of code is common for near1 and regular paths
{ .mfb
      nop.m 999
      fadd.s0  f8 = FR_Y_lo,FR_Y_hi               // Result=Y_lo+Y_hi
      br.ret.sptk   b0                       // Common exit for 2^-80 < x < inf
}
;;


// Here if x=-1
LOG1P_EQ_Minus_1:
//
//    If x=-1 raise divide by zero and return -inf
//
{ .mfi
      mov   GR_Parameter_TAG = 138
      fsub.s1 FR_Output_X_tmp = f0, f1
      nop.i 999
}
;;

{ .mfb
      nop.m 999
      frcpa.s0 FR_Output_X_tmp, p8 =  FR_Output_X_tmp, f0
      br.cond.sptk __libm_error_region
}
;;

LOG1P_special:
{ .mfi
      nop.m 999
      fclass.m.unc p8, p0 =  FR_Input_X, 0x1E1  // Test for natval, nan, +inf
      nop.i 999
}
;;

//
//    For SNaN raise invalid and return QNaN.
//    For QNaN raise invalid and return QNaN.
//    For +Inf return +Inf.
//
{ .mfb
      nop.m 999
(p8)  fmpy.s0 f8 =  FR_Input_X, f1
(p8)  br.ret.sptk   b0                          // Return for natval, nan, +inf
}
;;

//
//    For -Inf raise invalid and return QNaN.
//
{ .mfb
      mov   GR_Parameter_TAG = 139
      fmpy.s0 FR_Output_X_tmp =  FR_Input_X, f0
      br.cond.sptk __libm_error_region
}
;;


LOG1P_unsupported:
//
//    Return generated NaN or other value.
//
{ .mfb
      nop.m 999
      fmpy.s0 f8 = FR_Input_X, f0
      br.ret.sptk   b0
}
;;

// Here if -inf < x < -1
LOG1P_LT_Minus_1:
//
//    Deal with x < -1 in a special way - raise
//    invalid and produce QNaN indefinite.
//
{ .mfb
      mov   GR_Parameter_TAG = 139
      frcpa.s0 FR_Output_X_tmp, p8 =  f0, f0
      br.cond.sptk __libm_error_region
}
;;


GLOBAL_IEEE754_END(log1pl)

LOCAL_LIBM_ENTRY(__libm_error_region)
.prologue
{ .mfi
        add   GR_Parameter_Y=-32,sp             // Parameter 2 value
        nop.f 0
.save   ar.pfs,GR_SAVE_PFS
        mov  GR_SAVE_PFS=ar.pfs                 // Save ar.pfs
}
{ .mfi
.fframe 64
        add sp=-64,sp                           // Create new stack
        nop.f 0
        mov GR_SAVE_GP=gp                       // Save gp
};;
{ .mmi
        stfe [GR_Parameter_Y] = FR_Y,16         // Save Parameter 2 on stack
        add GR_Parameter_X = 16,sp              // Parameter 1 address
.save   b0, GR_SAVE_B0
        mov GR_SAVE_B0=b0                       // Save b0
};;
.body
{ .mib
        stfe [GR_Parameter_X] = FR_X            // Store Parameter 1 on stack
        add   GR_Parameter_RESULT = 0,GR_Parameter_Y
        nop.b 0                                 // Parameter 3 address
}
{ .mib
        stfe [GR_Parameter_Y] = FR_RESULT      // Store Parameter 3 on stack
        add   GR_Parameter_Y = -16,GR_Parameter_Y
        br.call.sptk b0=__libm_error_support#  // Call error handling function
};;
{ .mmi
        nop.m 999
        nop.m 999
        add   GR_Parameter_RESULT = 48,sp
};;
{ .mmi
        ldfe  f8 = [GR_Parameter_RESULT]       // Get return result off stack
.restore sp
        add   sp = 64,sp                       // Restore stack pointer
        mov   b0 = GR_SAVE_B0                  // Restore return address
};;
{ .mib
        mov   gp = GR_SAVE_GP                  // Restore gp
        mov   ar.pfs = GR_SAVE_PFS             // Restore ar.pfs
        br.ret.sptk     b0                     // Return
};;

LOCAL_LIBM_END(__libm_error_region#)

.type   __libm_error_support#,@function
.global __libm_error_support#
