.file "sinhl.s"


// Copyright (c) 2000 - 2002, 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.
// 10/12/00 Update to set denormal operand and underflow flags
// 01/22/01 Fixed to set inexact flag for small args.  Fixed incorrect
//          call to __libm_error_support for 710.476 < x < 11357.2166.
// 05/02/01 Reworked to improve speed of all paths
// 05/20/02 Cleaned up namespace and sf0 syntax
// 12/04/02 Improved performance
//
// API
//==============================================================
// long double = sinhl(long double)
// input  floating point f8
// output floating point f8
//
// Registers used
//==============================================================
// general registers:
// r14 -> r40
// predicate registers used:
// p6 -> p11
// floating-point registers used:
// f9 -> f15; f32 -> f90;
// f8 has input, then output
//
// Overview of operation
//==============================================================
// There are seven paths
// 1. 0 < |x| < 0.25          SINH_BY_POLY
// 2. 0.25 <=|x| < 32         SINH_BY_TBL
// 3. 32 <= |x| < 11357.21655 SINH_BY_EXP (merged path with SINH_BY_TBL)
// 4. |x| >= 11357.21655      SINH_HUGE
// 5. x=0                     Done with early exit
// 6. x=inf,nan               Done with early exit
// 7. x=denormal              SINH_DENORM
//
// For double extended we get overflow for x >= 400c b174 ddc0 31ae c0ea
//                                           >= 11357.21655
//
//
// 1. SINH_BY_POLY   0 < |x| < 0.25
// ===============
// Evaluate sinh(x) by a 13th order polynomial
// Care is take for the order of multiplication; and P_1 is not exactly 1/3!,
// P_2 is not exactly 1/5!, etc.
// sinh(x) = sign * (series(e^x) - series(e^-x))/2
//         = sign * (ax + ax^3/3! + ax^5/5! + ax^7/7! + ax^9/9! + ax^11/11!
//                        + ax^13/13!)
//         = sign * (ax   + ax * ( ax^2 * (1/3! + ax^4 * (1/7! + ax^4*1/11!)) )
//                        + ax * ( ax^4 * (1/5! + ax^4 * (1/9! + ax^4*1/13!)) ))
//         = sign * (ax   + ax*p_odd + (ax*p_even))
//         = sign * (ax   + Y_lo)
// sinh(x) = sign * (Y_hi + Y_lo)
// Note that ax = |x|
//
// 2. SINH_BY_TBL   0.25 <= |x| < 32.0
// =============
// sinh(x) = sinh(B+R)
//         = sinh(B)cosh(R) + cosh(B)sinh(R)
//
// ax = |x| = M*log2/64 + R
// B = M*log2/64
// M = 64*N + j
//   We will calculate M and get N as (M-j)/64
//   The division is a shift.
// exp(B)  = exp(N*log2 + j*log2/64)
//         = 2^N * 2^(j*log2/64)
// sinh(B) = 1/2(e^B -e^-B)
//         = 1/2(2^N * 2^(j*log2/64) - 2^-N * 2^(-j*log2/64))
// sinh(B) = (2^(N-1) * 2^(j*log2/64) - 2^(-N-1) * 2^(-j*log2/64))
// cosh(B) = (2^(N-1) * 2^(j*log2/64) + 2^(-N-1) * 2^(-j*log2/64))
// 2^(j*log2/64) is stored as Tjhi + Tjlo , j= -32,....,32
// Tjhi is double-extended (80-bit) and Tjlo is single(32-bit)
//
// R = ax - M*log2/64
// R = ax - M*log2_by_64_hi - M*log2_by_64_lo
// exp(R) = 1 + R +R^2(1/2! + R(1/3! + R(1/4! + ... + R(1/n!)...)
//        = 1 + p_odd + p_even
//        where the p_even uses the A coefficients and the p_even uses
//        the B coefficients
//
// So sinh(R) = 1 + p_odd + p_even -(1 -p_odd -p_even)/2 = p_odd
//    cosh(R) = 1 + p_even
//    sinh(B) = S_hi + S_lo
//    cosh(B) = C_hi
// sinh(x) = sinh(B)cosh(R) + cosh(B)sinh(R)
//
// 3. SINH_BY_EXP   32.0 <= |x| < 11357.21655  ( 400c b174 ddc0 31ae c0ea )
// ==============
// Can approximate result by exp(x)/2 in this region.
// Y_hi = Tjhi
// Y_lo = Tjhi * (p_odd + p_even) + Tjlo
// sinh(x) = Y_hi + Y_lo
//
// 4. SINH_HUGE     |x| >= 11357.21655  ( 400c b174 ddc0 31ae c0ea )
// ============
// Set error tag and call error support
//
//
// Assembly macros
//==============================================================
r_ad5                 = r14
r_rshf_2to57          = r15
r_exp_denorm          = r15
r_ad_mJ_lo            = r15
r_ad_J_lo             = r16
r_2Nm1                = r17
r_2mNm1               = r18
r_exp_x               = r18
r_ad_J_hi             = r19
r_ad2o                = r19
r_ad_mJ_hi            = r20
r_mj                  = r21
r_ad2e                = r22
r_ad3                 = r23
r_ad1                 = r24
r_Mmj                 = r24
r_rshf                = r25
r_M                   = r25
r_N                   = r25
r_jshf                = r26
r_exp_2tom57          = r26
r_j                   = r26
r_exp_mask            = r27
r_signexp_x           = r28
r_signexp_sgnx_0_5    = r28
r_exp_0_25            = r29
r_sig_inv_ln2         = r30
r_exp_32              = r30
r_exp_huge            = r30
r_ad4                 = r31

GR_SAVE_PFS           = r34
GR_SAVE_B0            = r35
GR_SAVE_GP            = r36

GR_Parameter_X        = r37
GR_Parameter_Y        = r38
GR_Parameter_RESULT   = r39
GR_Parameter_TAG      = r40


f_ABS_X               = f9
f_X2                  = f10
f_X4                  = f11
f_tmp                 = f14
f_RSHF                = f15

f_Inv_log2by64        = f32
f_log2by64_lo         = f33
f_log2by64_hi         = f34
f_A1                  = f35

f_A2                  = f36
f_A3                  = f37
f_Rcub                = f38
f_M_temp              = f39
f_R_temp              = f40

f_Rsq                 = f41
f_R                   = f42
f_M                   = f43
f_B1                  = f44
f_B2                  = f45

f_B3                  = f46
f_peven_temp1         = f47
f_peven_temp2         = f48
f_peven               = f49
f_podd_temp1          = f50

f_podd_temp2          = f51
f_podd                = f52
f_poly65              = f53
f_poly6543            = f53
f_poly6to1            = f53
f_poly43              = f54
f_poly21              = f55

f_X3                  = f56
f_INV_LN2_2TO63       = f57
f_RSHF_2TO57          = f58
f_2TOM57              = f59
f_smlst_oflow_input   = f60

f_pre_result          = f61
f_huge                = f62
f_spos                = f63
f_sneg                = f64
f_Tjhi                = f65

f_Tjlo                = f66
f_Tmjhi               = f67
f_Tmjlo               = f68
f_S_hi                = f69
f_SC_hi_temp          = f70

f_S_lo_temp1          = f71
f_S_lo_temp2          = f72
f_S_lo_temp3          = f73
f_S_lo_temp4          = f73
f_S_lo                = f74
f_C_hi                = f75

f_Y_hi                = f77
f_Y_lo_temp           = f78
f_Y_lo                = f79
f_NORM_X              = f80

f_P1                  = f81
f_P2                  = f82
f_P3                  = f83
f_P4                  = f84
f_P5                  = f85

f_P6                  = f86
f_Tjhi_spos           = f87
f_Tjlo_spos           = f88
f_huge                = f89
f_signed_hi_lo        = f90


// Data tables
//==============================================================

// DO NOT CHANGE ORDER OF THESE TABLES
RODATA

.align 16
LOCAL_OBJECT_START(sinh_arg_reduction)
//   data8 0xB8AA3B295C17F0BC, 0x00004005  // 64/log2 -- signif loaded with setf
   data8 0xB17217F7D1000000, 0x00003FF8  // log2/64 high part
   data8 0xCF79ABC9E3B39804, 0x00003FD0  // log2/64 low part
   data8 0xb174ddc031aec0ea, 0x0000400c  // Smallest x to overflow (11357.21655)
LOCAL_OBJECT_END(sinh_arg_reduction)

LOCAL_OBJECT_START(sinh_p_table)
   data8 0xB08AF9AE78C1239F, 0x00003FDE  // P6
   data8 0xB8EF1D28926D8891, 0x00003FEC  // P4
   data8 0x8888888888888412, 0x00003FF8  // P2
   data8 0xD732377688025BE9, 0x00003FE5  // P5
   data8 0xD00D00D00D4D39F2, 0x00003FF2  // P3
   data8 0xAAAAAAAAAAAAAAAB, 0x00003FFC  // P1
LOCAL_OBJECT_END(sinh_p_table)

LOCAL_OBJECT_START(sinh_ab_table)
   data8 0xAAAAAAAAAAAAAAAC, 0x00003FFC  // A1
   data8 0x88888888884ECDD5, 0x00003FF8  // A2
   data8 0xD00D0C6DCC26A86B, 0x00003FF2  // A3
   data8 0x8000000000000002, 0x00003FFE  // B1
   data8 0xAAAAAAAAAA402C77, 0x00003FFA  // B2
   data8 0xB60B6CC96BDB144D, 0x00003FF5  // B3
LOCAL_OBJECT_END(sinh_ab_table)

LOCAL_OBJECT_START(sinh_j_hi_table)
   data8 0xB504F333F9DE6484, 0x00003FFE
   data8 0xB6FD91E328D17791, 0x00003FFE
   data8 0xB8FBAF4762FB9EE9, 0x00003FFE
   data8 0xBAFF5AB2133E45FB, 0x00003FFE
   data8 0xBD08A39F580C36BF, 0x00003FFE
   data8 0xBF1799B67A731083, 0x00003FFE
   data8 0xC12C4CCA66709456, 0x00003FFE
   data8 0xC346CCDA24976407, 0x00003FFE
   data8 0xC5672A115506DADD, 0x00003FFE
   data8 0xC78D74C8ABB9B15D, 0x00003FFE
   data8 0xC9B9BD866E2F27A3, 0x00003FFE
   data8 0xCBEC14FEF2727C5D, 0x00003FFE
   data8 0xCE248C151F8480E4, 0x00003FFE
   data8 0xD06333DAEF2B2595, 0x00003FFE
   data8 0xD2A81D91F12AE45A, 0x00003FFE
   data8 0xD4F35AABCFEDFA1F, 0x00003FFE
   data8 0xD744FCCAD69D6AF4, 0x00003FFE
   data8 0xD99D15C278AFD7B6, 0x00003FFE
   data8 0xDBFBB797DAF23755, 0x00003FFE
   data8 0xDE60F4825E0E9124, 0x00003FFE
   data8 0xE0CCDEEC2A94E111, 0x00003FFE
   data8 0xE33F8972BE8A5A51, 0x00003FFE
   data8 0xE5B906E77C8348A8, 0x00003FFE
   data8 0xE8396A503C4BDC68, 0x00003FFE
   data8 0xEAC0C6E7DD24392F, 0x00003FFE
   data8 0xED4F301ED9942B84, 0x00003FFE
   data8 0xEFE4B99BDCDAF5CB, 0x00003FFE
   data8 0xF281773C59FFB13A, 0x00003FFE
   data8 0xF5257D152486CC2C, 0x00003FFE
   data8 0xF7D0DF730AD13BB9, 0x00003FFE
   data8 0xFA83B2DB722A033A, 0x00003FFE
   data8 0xFD3E0C0CF486C175, 0x00003FFE
   data8 0x8000000000000000, 0x00003FFF // Center of table
   data8 0x8164D1F3BC030773, 0x00003FFF
   data8 0x82CD8698AC2BA1D7, 0x00003FFF
   data8 0x843A28C3ACDE4046, 0x00003FFF
   data8 0x85AAC367CC487B15, 0x00003FFF
   data8 0x871F61969E8D1010, 0x00003FFF
   data8 0x88980E8092DA8527, 0x00003FFF
   data8 0x8A14D575496EFD9A, 0x00003FFF
   data8 0x8B95C1E3EA8BD6E7, 0x00003FFF
   data8 0x8D1ADF5B7E5BA9E6, 0x00003FFF
   data8 0x8EA4398B45CD53C0, 0x00003FFF
   data8 0x9031DC431466B1DC, 0x00003FFF
   data8 0x91C3D373AB11C336, 0x00003FFF
   data8 0x935A2B2F13E6E92C, 0x00003FFF
   data8 0x94F4EFA8FEF70961, 0x00003FFF
   data8 0x96942D3720185A00, 0x00003FFF
   data8 0x9837F0518DB8A96F, 0x00003FFF
   data8 0x99E0459320B7FA65, 0x00003FFF
   data8 0x9B8D39B9D54E5539, 0x00003FFF
   data8 0x9D3ED9A72CFFB751, 0x00003FFF
   data8 0x9EF5326091A111AE, 0x00003FFF
   data8 0xA0B0510FB9714FC2, 0x00003FFF
   data8 0xA27043030C496819, 0x00003FFF
   data8 0xA43515AE09E6809E, 0x00003FFF
   data8 0xA5FED6A9B15138EA, 0x00003FFF
   data8 0xA7CD93B4E965356A, 0x00003FFF
   data8 0xA9A15AB4EA7C0EF8, 0x00003FFF
   data8 0xAB7A39B5A93ED337, 0x00003FFF
   data8 0xAD583EEA42A14AC6, 0x00003FFF
   data8 0xAF3B78AD690A4375, 0x00003FFF
   data8 0xB123F581D2AC2590, 0x00003FFF
   data8 0xB311C412A9112489, 0x00003FFF
   data8 0xB504F333F9DE6484, 0x00003FFF
LOCAL_OBJECT_END(sinh_j_hi_table)

LOCAL_OBJECT_START(sinh_j_lo_table)
   data4 0x1EB2FB13
   data4 0x1CE2CBE2
   data4 0x1DDC3CBC
   data4 0x1EE9AA34
   data4 0x9EAEFDC1
   data4 0x9DBF517B
   data4 0x1EF88AFB
   data4 0x1E03B216
   data4 0x1E78AB43
   data4 0x9E7B1747
   data4 0x9EFE3C0E
   data4 0x9D36F837
   data4 0x9DEE53E4
   data4 0x9E24AE8E
   data4 0x1D912473
   data4 0x1EB243BE
   data4 0x1E669A2F
   data4 0x9BBC610A
   data4 0x1E761035
   data4 0x9E0BE175
   data4 0x1CCB12A1
   data4 0x1D1BFE90
   data4 0x1DF2F47A
   data4 0x1EF22F22
   data4 0x9E3F4A29
   data4 0x1EC01A5B
   data4 0x1E8CAC3A
   data4 0x9DBB3FAB
   data4 0x1EF73A19
   data4 0x9BB795B5
   data4 0x1EF84B76
   data4 0x9EF5818B
   data4 0x00000000 // Center of table
   data4 0x1F77CACA
   data4 0x1EF8A91D
   data4 0x1E57C976
   data4 0x9EE8DA92
   data4 0x1EE85C9F
   data4 0x1F3BF1AF
   data4 0x1D80CA1E
   data4 0x9D0373AF
   data4 0x9F167097
   data4 0x1EB70051
   data4 0x1F6EB029
   data4 0x1DFD6D8E
   data4 0x9EB319B0
   data4 0x1EBA2BEB
   data4 0x1F11D537
   data4 0x1F0D5A46
   data4 0x9E5E7BCA
   data4 0x9F3AAFD1
   data4 0x9E86DACC
   data4 0x9F3EDDC2
   data4 0x1E496E3D
   data4 0x9F490BF6
   data4 0x1DD1DB48
   data4 0x1E65EBFB
   data4 0x9F427496
   data4 0x1F283C4A
   data4 0x1F4B0047
   data4 0x1F130152
   data4 0x9E8367C0
   data4 0x9F705F90
   data4 0x1EFB3C53
   data4 0x1F32FB13
LOCAL_OBJECT_END(sinh_j_lo_table)


.section .text
GLOBAL_IEEE754_ENTRY(sinhl)

{ .mlx
      getf.exp        r_signexp_x = f8   // Get signexp of x, must redo if unorm
      movl            r_sig_inv_ln2 = 0xb8aa3b295c17f0bc // significand of 1/ln2
}
{ .mlx
      addl            r_ad1 = @ltoff(sinh_arg_reduction), gp
      movl            r_rshf_2to57 = 0x4778000000000000 // 1.10000 2^(63+57)
}
;;

{ .mfi
      ld8             r_ad1 = [r_ad1]
      fmerge.s        f_ABS_X    = f0,f8
      mov             r_exp_0_25 = 0x0fffd    // Form exponent for 0.25
}
{ .mfi
      nop.m           0
      fnorm.s1        f_NORM_X = f8
      mov             r_exp_2tom57 = 0xffff-57
}
;;

{ .mfi
      setf.d          f_RSHF_2TO57 = r_rshf_2to57 // Form const 1.100 * 2^120
      fclass.m        p10,p0 = f8, 0x0b           // Test for denorm
      mov             r_exp_mask = 0x1ffff
}
{ .mlx
      setf.sig        f_INV_LN2_2TO63 = r_sig_inv_ln2 // Form 1/ln2 * 2^63
      movl            r_rshf = 0x43e8000000000000 // 1.1000 2^63 for right shift
}
;;

{ .mfi
      nop.m           0
      fclass.m        p7,p0 = f8, 0x07  // Test if x=0
      nop.i           0
}
{ .mfi
      setf.exp        f_2TOM57 = r_exp_2tom57 // Form 2^-57 for scaling
      nop.f           0
      add             r_ad3 = 0x90, r_ad1  // Point to ab_table
}
;;

{ .mfi
      setf.d          f_RSHF = r_rshf     // Form right shift const 1.100 * 2^63
      fclass.m        p6,p0 = f8, 0xe3     // Test if x nan, inf
      add             r_ad4 = 0x2f0, r_ad1 // Point to j_hi_table midpoint
}
{ .mib
      add             r_ad2e = 0x20, r_ad1 // Point to p_table
      nop.i           0
(p10) br.cond.spnt    SINH_DENORM          // Branch if x denorm
}
;;

// Common path -- return here from SINH_DENORM if x is unnorm
SINH_COMMON:
{ .mfi
      ldfe            f_smlst_oflow_input = [r_ad2e],16
      nop.f           0
      add             r_ad5 = 0x580, r_ad1 // Point to j_lo_table midpoint
}
{ .mib
      ldfe            f_log2by64_hi  = [r_ad1],16
      and             r_exp_x = r_exp_mask, r_signexp_x
(p7)  br.ret.spnt     b0                  // Exit if x=0
}
;;

// Get the A coefficients for SINH_BY_TBL
{ .mfi
      ldfe            f_A1 = [r_ad3],16
      fcmp.lt.s1      p8,p9 = f8,f0           // Test for x<0
      cmp.lt          p7,p0 = r_exp_x, r_exp_0_25  // Test x < 0.25
}
{ .mfb
      add             r_ad2o = 0x30, r_ad2e  // Point to p_table odd coeffs
(p6)  fma.s0          f8 = f8,f1,f0          // Result for x nan, inf
(p6)  br.ret.spnt     b0                     // Exit for x nan, inf
}
;;

// Calculate X2 = ax*ax for SINH_BY_POLY
{ .mfi
      ldfe            f_log2by64_lo  = [r_ad1],16
      nop.f           0
      nop.i           0
}
{ .mfb
      ldfe            f_A2 = [r_ad3],16
      fma.s1          f_X2 = f_NORM_X, f_NORM_X, f0
(p7)  br.cond.spnt    SINH_BY_POLY
}
;;

// Here if |x| >= 0.25
SINH_BY_TBL:
// ******************************************************
// STEP 1 (TBL and EXP) - Argument reduction
// ******************************************************
// Get the following constants.
// Inv_log2by64
// log2by64_hi
// log2by64_lo


// We want 2^(N-1) and 2^(-N-1). So bias N-1 and -N-1 and
// put them in an exponent.
// f_spos = 2^(N-1) and f_sneg = 2^(-N-1)
// 0xffff + (N-1)  = 0xffff +N -1
// 0xffff - (N +1) = 0xffff -N -1


// Calculate M and keep it as integer and floating point.
// M = round-to-integer(x*Inv_log2by64)
// f_M = M = truncate(ax/(log2/64))
// Put the integer representation of M in r_M
//    and the floating point representation of M in f_M

// Get the remaining A,B coefficients
{ .mmi
      ldfe            f_A3 = [r_ad3],16
      nop.m           0
      nop.i           0
}
;;

.pred.rel "mutex",p8,p9
// Use constant (1.100*2^(63-6)) to get rounded M into rightmost significand
// |x| * 64 * 1/ln2 * 2^(63-6) + 1.1000 * 2^(63+(63-6))
{ .mfi
(p8)  mov             r_signexp_sgnx_0_5 = 0x2fffe // signexp of -0.5
      fma.s1          f_M_temp = f_ABS_X, f_INV_LN2_2TO63, f_RSHF_2TO57
(p9)  mov             r_signexp_sgnx_0_5 = 0x0fffe // signexp of +0.5
}
;;

// Test for |x| >= overflow limit
{ .mfi
      ldfe            f_B1 = [r_ad3],16
      fcmp.ge.s1      p6,p0 = f_ABS_X, f_smlst_oflow_input
      nop.i           0
}
;;

{ .mfi
      ldfe            f_B2 = [r_ad3],16
      nop.f           0
      mov             r_exp_32 = 0x10004
}
;;

// Subtract RSHF constant to get rounded M as a floating point value
// M_temp * 2^(63-6) - 2^63
{ .mfb
      ldfe            f_B3 = [r_ad3],16
      fms.s1          f_M = f_M_temp, f_2TOM57, f_RSHF
(p6)  br.cond.spnt    SINH_HUGE  // Branch if result will overflow
}
;;

{ .mfi
      getf.sig        r_M = f_M_temp
      nop.f           0
      cmp.ge          p7,p6 = r_exp_x, r_exp_32 // Test if x >= 32
}
;;

// Calculate j. j is the signed extension of the six lsb of M. It
// has a range of -32 thru 31.

// Calculate R
// ax - M*log2by64_hi
// R = (ax - M*log2by64_hi) - M*log2by64_lo

{ .mfi
      nop.m           0
      fnma.s1         f_R_temp = f_M, f_log2by64_hi, f_ABS_X
      and             r_j = 0x3f, r_M
}
;;

{ .mii
      nop.m           0
      shl             r_jshf = r_j, 0x2 // Shift j so can sign extend it
;;
      sxt1            r_jshf = r_jshf
}
;;

{ .mii
      nop.m           0
      shr             r_j = r_jshf, 0x2    // Now j has range -32 to 31
      nop.i           0
}
;;

{ .mmi
      shladd          r_ad_J_hi = r_j, 4, r_ad4 // pointer to Tjhi
      sub             r_Mmj = r_M, r_j          // M-j
      sub             r_mj = r0, r_j            // Form -j
}
;;

// The TBL and EXP branches are merged and predicated
// If TBL, p6 true, 0.25 <= |x| < 32
// If EXP, p7 true, 32 <= |x| < overflow_limit
//
// N = (M-j)/64
{ .mfi
      ldfe            f_Tjhi = [r_ad_J_hi]
      fnma.s1         f_R = f_M, f_log2by64_lo, f_R_temp
      shr             r_N = r_Mmj, 0x6            // N = (M-j)/64
}
{ .mfi
      shladd          r_ad_mJ_hi = r_mj, 4, r_ad4 // pointer to Tmjhi
      nop.f           0
      shladd          r_ad_mJ_lo = r_mj, 2, r_ad5 // pointer to Tmjlo
}
;;

{ .mfi
      sub             r_2mNm1 = r_signexp_sgnx_0_5, r_N // signexp sgnx*2^(-N-1)
      nop.f           0
      shladd          r_ad_J_lo = r_j, 2, r_ad5   // pointer to Tjlo
}
{ .mfi
      ldfe            f_Tmjhi = [r_ad_mJ_hi]
      nop.f           0
      add             r_2Nm1 = r_signexp_sgnx_0_5, r_N // signexp sgnx*2^(N-1)
}
;;

{ .mmf
      ldfs            f_Tmjlo = [r_ad_mJ_lo]
      setf.exp        f_sneg = r_2mNm1            // Form sgnx * 2^(-N-1)
      nop.f           0
}
;;

{ .mmf
      ldfs            f_Tjlo  = [r_ad_J_lo]
      setf.exp        f_spos = r_2Nm1             // Form sgnx * 2^(N-1)
      nop.f           0
}
;;

// ******************************************************
// STEP 2 (TBL and EXP)
// ******************************************************
// Calculate Rsquared and Rcubed in preparation for p_even and p_odd

{ .mmf
      nop.m           0
      nop.m           0
      fma.s1          f_Rsq  = f_R, f_R, f0
}
;;


// Calculate p_even
// B_2 + Rsq *B_3
// B_1 + Rsq * (B_2 + Rsq *B_3)
// p_even = Rsq * (B_1 + Rsq * (B_2 + Rsq *B_3))
{ .mfi
      nop.m           0
      fma.s1          f_peven_temp1 = f_Rsq, f_B3, f_B2
      nop.i           0
}
// Calculate p_odd
// A_2 + Rsq *A_3
// A_1 + Rsq * (A_2 + Rsq *A_3)
// podd = R + Rcub * (A_1 + Rsq * (A_2 + Rsq *A_3))
{ .mfi
      nop.m           0
      fma.s1          f_podd_temp1 = f_Rsq, f_A3, f_A2
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_Rcub = f_Rsq, f_R, f0
      nop.i           0
}
;;

//
// If TBL,
// Calculate S_hi and S_lo, and C_hi
// SC_hi_temp = sneg * Tmjhi
// S_hi = spos * Tjhi - SC_hi_temp
// S_hi = spos * Tjhi - (sneg * Tmjhi)
// C_hi = spos * Tjhi + SC_hi_temp
// C_hi = spos * Tjhi + (sneg * Tmjhi)

{ .mfi
      nop.m           0
(p6)  fma.s1          f_SC_hi_temp = f_sneg, f_Tmjhi, f0
      nop.i           0
}
;;

// If TBL,
// S_lo_temp3 = sneg * Tmjlo
// S_lo_temp4 = spos * Tjlo - S_lo_temp3
// S_lo_temp4 = spos * Tjlo -(sneg * Tmjlo)
{ .mfi
      nop.m           0
(p6)  fma.s1          f_S_lo_temp3 =  f_sneg, f_Tmjlo, f0
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_peven_temp2 = f_Rsq, f_peven_temp1, f_B1
      nop.i           0
}
{ .mfi
      nop.m           0
      fma.s1          f_podd_temp2 = f_Rsq, f_podd_temp1, f_A1
      nop.i           0
}
;;

// If EXP,
// Compute sgnx * 2^(N-1) * Tjhi and sgnx * 2^(N-1) * Tjlo
{ .mfi
      nop.m           0
(p7)  fma.s1          f_Tjhi_spos = f_Tjhi, f_spos, f0
      nop.i           0
}
{ .mfi
      nop.m           0
(p7)  fma.s1          f_Tjlo_spos = f_Tjlo, f_spos, f0
      nop.i           0
}
;;

{ .mfi
      nop.m           0
(p6)  fms.s1          f_S_hi = f_spos, f_Tjhi, f_SC_hi_temp
      nop.i           0
}
;;

{ .mfi
      nop.m           0
(p6)  fma.s1          f_C_hi = f_spos, f_Tjhi, f_SC_hi_temp
      nop.i           0
}
{ .mfi
      nop.m           0
(p6)  fms.s1          f_S_lo_temp4 = f_spos, f_Tjlo, f_S_lo_temp3
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_peven = f_Rsq, f_peven_temp2, f0
      nop.i           0
}
{ .mfi
      nop.m           0
      fma.s1          f_podd = f_podd_temp2, f_Rcub, f_R
      nop.i           0
}
;;

// If TBL,
// S_lo_temp1 =  spos * Tjhi - S_hi
// S_lo_temp2 = -sneg * Tmjlo + S_lo_temp1
// S_lo_temp2 = -sneg * Tmjlo + (spos * Tjhi - S_hi)

{ .mfi
      nop.m           0
(p6)  fms.s1          f_S_lo_temp1 =  f_spos, f_Tjhi,  f_S_hi
      nop.i           0
}
;;

{ .mfi
      nop.m           0
(p6)  fnma.s1         f_S_lo_temp2 = f_sneg, f_Tmjhi, f_S_lo_temp1
      nop.i           0
}
;;

// If EXP,
// Y_hi = sgnx * 2^(N-1) * Tjhi
// Y_lo = sgnx * 2^(N-1) * Tjhi * (p_odd + p_even) + sgnx * 2^(N-1) * Tjlo
{ .mfi
      nop.m           0
(p7)  fma.s1          f_Y_lo_temp =  f_peven, f1, f_podd
      nop.i           0
}
;;

// If TBL,
// S_lo = S_lo_temp4 + S_lo_temp2
{ .mfi
      nop.m           0
(p6)  fma.s1          f_S_lo = f_S_lo_temp4, f1, f_S_lo_temp2
      nop.i           0
}
;;

// If TBL,
// Y_hi = S_hi
// Y_lo = C_hi*p_odd + (S_hi*p_even + S_lo)
{ .mfi
      nop.m           0
(p6)  fma.s1          f_Y_lo_temp = f_S_hi, f_peven, f_S_lo
      nop.i           0
}
;;

{ .mfi
      nop.m           0
(p7)  fma.s1          f_Y_lo = f_Tjhi_spos, f_Y_lo_temp, f_Tjlo_spos
      nop.i           0
}
;;

// Dummy multiply to generate inexact
{ .mfi
      nop.m           0
      fmpy.s0         f_tmp = f_B2, f_B2
      nop.i           0
}
{ .mfi
      nop.m           0
(p6)  fma.s1          f_Y_lo = f_C_hi, f_podd, f_Y_lo_temp
      nop.i           0
}
;;

// f8 = answer = Y_hi + Y_lo
{ .mfi
      nop.m           0
(p7)  fma.s0          f8 = f_Y_lo,  f1, f_Tjhi_spos
      nop.i           0
}
;;

// f8 = answer = Y_hi + Y_lo
{ .mfb
      nop.m           0
(p6)  fma.s0          f8 = f_Y_lo, f1, f_S_hi
      br.ret.sptk     b0      // Exit for SINH_BY_TBL and SINH_BY_EXP
}
;;


// Here if 0 < |x| < 0.25
SINH_BY_POLY:
{ .mmf
      ldfe            f_P6 = [r_ad2e],16
      ldfe            f_P5 = [r_ad2o],16
      nop.f           0
}
;;

{ .mmi
      ldfe            f_P4 = [r_ad2e],16
      ldfe            f_P3 = [r_ad2o],16
      nop.i           0
}
;;

{ .mmi
      ldfe            f_P2 = [r_ad2e],16
      ldfe            f_P1 = [r_ad2o],16
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_X3 = f_NORM_X, f_X2, f0
      nop.i           0
}
{ .mfi
      nop.m           0
      fma.s1          f_X4 = f_X2, f_X2, f0
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_poly65 = f_X2, f_P6, f_P5
      nop.i           0
}
{ .mfi
      nop.m           0
      fma.s1          f_poly43 = f_X2, f_P4, f_P3
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_poly21 = f_X2, f_P2, f_P1
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_poly6543 = f_X4, f_poly65, f_poly43
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s1          f_poly6to1 = f_X4, f_poly6543, f_poly21
      nop.i           0
}
;;

// Dummy multiply to generate inexact
{ .mfi
      nop.m           0
      fmpy.s0         f_tmp = f_P6, f_P6
      nop.i           0
}
{ .mfb
      nop.m           0
      fma.s0          f8 = f_poly6to1, f_X3, f_NORM_X
      br.ret.sptk     b0                // Exit SINH_BY_POLY
}
;;


// Here if x denorm or unorm
SINH_DENORM:
// Determine if x really a denorm and not a unorm
{ .mmf
      getf.exp        r_signexp_x = f_NORM_X
      mov             r_exp_denorm = 0x0c001   // Real denorms have exp < this
      fmerge.s        f_ABS_X = f0, f_NORM_X
}
;;

{ .mfi
      nop.m           0
      fcmp.eq.s0      p10,p0 = f8, f0  // Set denorm flag
      nop.i           0
}
;;

// Set p8 if really a denorm
{ .mmi
      and             r_exp_x = r_exp_mask, r_signexp_x
;;
      cmp.lt          p8,p9 = r_exp_x, r_exp_denorm
      nop.i           0
}
;;

// Identify denormal operands.
{ .mfb
      nop.m           0
(p8)  fcmp.ge.unc.s1  p6,p7 = f8, f0   // Test sign of denorm
(p9)  br.cond.sptk    SINH_COMMON    // Return to main path if x unorm
}
;;

{ .mfi
      nop.m           0
(p6)  fma.s0          f8 =  f8,f8,f8  // If x +denorm, result=x+x^2
      nop.i           0
}
{ .mfb
      nop.m           0
(p7)  fnma.s0         f8 =  f8,f8,f8  // If x -denorm, result=x-x^2
      br.ret.sptk     b0            // Exit if x denorm
}
;;


// Here if |x| >= overflow limit
SINH_HUGE:
// for SINH_HUGE, put 24000 in exponent; take sign from input
{ .mmi
      mov             r_exp_huge = 0x15dbf
;;
      setf.exp        f_huge  = r_exp_huge
      nop.i           0
}
;;

.pred.rel "mutex",p8,p9
{ .mfi
      alloc           r32 = ar.pfs,0,5,4,0
(p8)  fnma.s1         f_signed_hi_lo = f_huge, f1, f1
      nop.i           0
}
{ .mfi
      nop.m           0
(p9)  fma.s1          f_signed_hi_lo = f_huge, f1, f1
      nop.i           0
}
;;

{ .mfi
      nop.m           0
      fma.s0          f_pre_result = f_signed_hi_lo, f_huge, f0
      mov             GR_Parameter_TAG = 126
}
;;

GLOBAL_IEEE754_END(sinhl)


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] = f0,16            // STORE 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] = f8               // STORE Parameter 1 on stack
        add   GR_Parameter_RESULT = 0,GR_Parameter_Y   // Parameter 3 address
        nop.b 0
}
{ .mib
        stfe [GR_Parameter_Y] = f_pre_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
        add   GR_Parameter_RESULT = 48,sp
        nop.m 0
        nop.i 0
};;

{ .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#
