.file "erfcf.s"


// Copyright (c) 2002 - 2005, Intel Corporation
// All rights reserved.
//
// Contributed 2002 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
//==============================================================
// 01/17/02  Initial version
// 05/20/02  Cleaned up namespace and sf0 syntax
// 02/06/03  Reordered header: .section, .global, .proc, .align
// 03/31/05  Reformatted delimiters between data tables
//
// API
//==============================================================
// float erfcf(float)
//
// Overview of operation
//==============================================================
// 1. 0 <= x <= 10.06
//
//    erfcf(x)  = P15(x) * exp( -x^2 )
//
//    Comment:
//
//    Let x(0)=0, x(i) = 2^(i), i=1,...3, x(4)= 10.06
//
//    Let x(i)<= x < x(i+1).
//    We can find i as exponent of argument x (let i = 0 for 0<= x < 2  )
//
//    Let P15(x) - polynomial approximation of degree 15 for function
//    erfcf(x) * exp( x^2) and x(i) <= x <= x(i+1), i = 0,1,2,3
//    Polynomial coefficients we have in the table erfc_p_table.
//
//    So we can find result for erfcf(x) as above.
//    Algorithm description for exp function see below.
//
// 2. -4.4 <= x < 0
//
//    erfcf(x)  = 2.0 - erfcf(-x)
//
// 3. x > 10.06
//
//    erfcf(x)  ~=~ 0.0
//
// 4. x < -4.4
//
//    erfcf(x)  ~=~ 2.0

// Special values
//==============================================================
// erfcf(+0)    = 1.0
// erfcf(-0)    = 1.0

// erfcf(+qnan) = +qnan
// erfcf(-qnan) = -qnan
// erfcf(+snan) = +qnan
// erfcf(-snan) = -qnan

// erfcf(-inf)  = 2.0
// erfcf(+inf)  = +0

//==============================================================
// Take double exp(double) from libm_64.
//
// Overview of operation
//==============================================================
// Take the input x. w is "how many log2/128 in x?"
//  w = x * 128/log2
//  n = int(w)
//  x = n log2/128 + r + delta

//  n = 128M + index_1 + 2^4 index_2
//  x = M log2 + (log2/128) index_1 + (log2/8) index_2 + r + delta

//  exp(x) = 2^M  2^(index_1/128)  2^(index_2/8) exp(r) exp(delta)
//       Construct 2^M
//       Get 2^(index_1/128) from table_1;
//       Get 2^(index_2/8)   from table_2;
//       Calculate exp(r) by series
//          r = x - n (log2/128)_high
//          delta = - n (log2/128)_low
//       Calculate exp(delta) as 1 + delta
//
// Comment for erfcf:
//
// Let exp(r) = 1 + x + 0.5*x^2 + (1/6)*x^3
// Let delta  = 0.
//==============================================================
//
// Registers used
//==============================================================
// Floating Point registers used:
// f8, input
// f6,f7,f9 -> f11,  f32 -> f92

// General registers used:
// r14 -> r22,r32 -> r50

// Predicate registers used:
// p6 -> p15

// Assembly macros
//==============================================================
EXP_AD_TB1             = r14
exp_GR_sig_inv_ln2     = r15
exp_TB1_size           = r16
exp_GR_rshf_2to56      = r17
exp_GR_exp_2tom56      = r18

exp_GR_rshf            = r33
EXP_AD_TB2             = r34
EXP_AD_P               = r35
exp_GR_N               = r36
exp_GR_index_1         = r37
exp_GR_index_2_16      = r38
exp_GR_biased_M        = r39
EXP_AD_T1              = r40
EXP_AD_T2              = r41
exp_TB2_size           = r42

// GR for erfcf(x)
//==============================================================
GR_IndxPlusBias        = r19
GR_ExpMask             = r20
GR_BIAS                = r21
GR_ShftPi_bias         = r22

GR_P_POINT_1           = r43
GR_P_POINT_2           = r44
GR_P_POINT_3           = r45
GR_P_POINT_4           = r46

GR_ShftPi              = r47
GR_EpsNorm             = r48

GR_05                  = r49
GR_1_by_6              = r50

// GR for __libm_support call
//==============================================================

GR_SAVE_B0             = r43
GR_SAVE_PFS            = r44
GR_SAVE_GP             = r45
GR_SAVE_SP             = r46

GR_Parameter_X         = r47
GR_Parameter_Y         = r48
GR_Parameter_RESULT    = r49
GR_Parameter_TAG       = r50


// FR for exp(-x^2)
//==============================================================
FR_X                   = f10
FR_Y                   = f1
FR_RESULT              = f8

EXP_2TOM56             = f6
EXP_INV_LN2_2TO63      = f7
EXP_W_2TO56_RSH        = f9
exp_ln2_by_128_hi      = f11

EXP_RSHF_2TO56         = f32
exp_ln2_by_128_lo      = f33
EXP_RSHF               = f34
EXP_Nfloat             = f35
exp_r                  = f36
exp_rsq                = f37
EXP_2M                 = f38
exp_S1                 = f39
exp_T1                 = f40
exp_P                  = f41
exp_S                  = f42
EXP_NORM_f8            = f43
exp_S2                 = f44
exp_T2                 = f45

// FR for erfcf(x)
//==============================================================
FR_AbsArg              = f46
FR_Tmp                 = f47
FR_Tmp1                = f48
FR_Tmpf                = f49
FR_NormX               = f50

FR_A15                 = f51
FR_A14                 = f52

FR_A13                 = f53
FR_A12                 = f54

FR_A11                 = f55
FR_A10                 = f56

FR_A9                  = f57
FR_A8                  = f58

FR_A7                  = f59
FR_A6                  = f60

FR_A5                  = f61
FR_A4                  = f62

FR_A3                  = f63
FR_A2                  = f64

FR_A1                  = f65
FR_A0                  = f66

FR_P15_0_1             = f67
FR_P15_1_1             = f68
FR_P15_1_2             = f69
FR_P15_2_1             = f70
FR_P15_2_2             = f71
FR_P15_3_1             = f72
FR_P15_3_2             = f73
FR_P15_4_1             = f74
FR_P15_4_2             = f75
FR_P15_7_1             = f76
FR_P15_7_2             = f77
FR_P15_8_1             = f78
FR_P15_9_1             = f79
FR_P15_9_2             = f80
FR_P15_13_1            = f81
FR_P15_14_1            = f82
FR_P15_14_2            = f83

FR_2                   = f84
FR_05                  = f85
FR_1_by_6              = f86
FR_Pol                 = f87
FR_Exp                 = f88

FR_POS_ARG_ASYMP       = f89
FR_NEG_ARG_ASYMP       = f90

FR_UnfBound            = f91
FR_EpsNorm             = f92

// Data tables
//==============================================================
RODATA
.align 16

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

// double-extended 1/ln(2)
// 3fff b8aa 3b29 5c17 f0bb be87fed0691d3e88
// 3fff b8aa 3b29 5c17 f0bc
// For speed the significand will be loaded directly with a movl and setf.sig
//   and the exponent will be bias+63 instead of bias+0.  Thus subsequent
//   computations need to scale appropriately.
// The constant 128/ln(2) is needed for the computation of w.  This is also
//   obtained by scaling the computations.
//
// Two shifting constants are loaded directly with movl and setf.d.
//   1. EXP_RSHF_2TO56 = 1.1000..00 * 2^(63-7)
//        This constant is added to x*1/ln2 to shift the integer part of
//        x*128/ln2 into the rightmost bits of the significand.
//        The result of this fma is EXP_W_2TO56_RSH.
//   2. EXP_RSHF       = 1.1000..00 * 2^(63)
//        This constant is subtracted from EXP_W_2TO56_RSH * 2^(-56) to give
//        the integer part of w, n, as a floating-point number.
//        The result of this fms is EXP_Nfloat.


LOCAL_OBJECT_START(exp_table_1)

data4 0x4120f5c3, 0x408ccccd      //POS_ARG_ASYMP = 10.06, NEG_ARG_ASYMP = 4.4
data4 0x41131Cdf, 0x00800000     //UnfBound ~=~ 9.1, EpsNorm ~=~ 1.1754944e-38
//
data8 0xb17217f7d1cf79ab , 0x00003ff7                            // ln2/128 hi
data8 0xc9e3b39803f2f6af , 0x00003fb7                            // ln2/128 lo
//
// Table 1 is 2^(index_1/128) where
// index_1 goes from 0 to 15
//
data8 0x8000000000000000 , 0x00003FFF
data8 0x80B1ED4FD999AB6C , 0x00003FFF
data8 0x8164D1F3BC030773 , 0x00003FFF
data8 0x8218AF4373FC25EC , 0x00003FFF
data8 0x82CD8698AC2BA1D7 , 0x00003FFF
data8 0x8383594EEFB6EE37 , 0x00003FFF
data8 0x843A28C3ACDE4046 , 0x00003FFF
data8 0x84F1F656379C1A29 , 0x00003FFF
data8 0x85AAC367CC487B15 , 0x00003FFF
data8 0x8664915B923FBA04 , 0x00003FFF
data8 0x871F61969E8D1010 , 0x00003FFF
data8 0x87DB357FF698D792 , 0x00003FFF
data8 0x88980E8092DA8527 , 0x00003FFF
data8 0x8955EE03618E5FDD , 0x00003FFF
data8 0x8A14D575496EFD9A , 0x00003FFF
data8 0x8AD4C6452C728924 , 0x00003FFF
LOCAL_OBJECT_END(exp_table_1)

// Table 2 is 2^(index_1/8) where
// index_2 goes from 0 to 7

LOCAL_OBJECT_START(exp_table_2)

data8 0x8000000000000000 , 0x00003FFF
data8 0x8B95C1E3EA8BD6E7 , 0x00003FFF
data8 0x9837F0518DB8A96F , 0x00003FFF
data8 0xA5FED6A9B15138EA , 0x00003FFF
data8 0xB504F333F9DE6484 , 0x00003FFF
data8 0xC5672A115506DADD , 0x00003FFF
data8 0xD744FCCAD69D6AF4 , 0x00003FFF
data8 0xEAC0C6E7DD24392F , 0x00003FFF
LOCAL_OBJECT_END(exp_table_2)

LOCAL_OBJECT_START(erfc_p_table)

// Pol_0
data8 0xBEA3260C63CB0446             //A15 = -5.70673541831883454676e-07
data8 0x3EE63D6178077654             //A14 = +1.06047480138940182343e-05
data8 0xBF18646BC5FC70A7             //A13 = -9.30491237309283694347e-05
data8 0x3F40F92F909117FE             //A12 = +5.17986512144075019133e-04
data8 0xBF611344289DE1E6             //A11 = -2.08438217390159994419e-03
data8 0x3F7AF9FE6AD16DC0             //A10 = +6.58606893292862351928e-03
data8 0xBF91D219E196CBA7             //A9 = -1.74030345858217321001e-02
data8 0x3FA4AFDDA355854C             //A8 = +4.04042493708041968315e-02
data8 0xBFB5D465BB7025AE             //A7 = -8.52721769916999425445e-02
data8 0x3FC54C15A95B717D             //A6 = +1.66384418195672549029e-01
data8 0xBFD340A75B4B1AB5             //A5 = -3.00821150926292166899e-01
data8 0x3FDFFFC0BFCD247F             //A4 = +4.99984919839853542841e-01
data8 0xBFE81270C361852B             //A3 = -7.52251035312075583309e-01
data8 0x3FEFFFFFC67295FC             //A2 = +9.99999892800303301771e-01
data8 0xBFF20DD74F8CD2BF             //A1 = -1.12837916445020868099e+00
data8 0x3FEFFFFFFFFE7C1D             //A0 = +9.99999999988975570714e-01
// Pol_1
data8 0xBDE8EC4BDD953B56             //A15 = -1.81338928934942767144e-10
data8 0x3E43607F269E2A1C             //A14 = +9.02309090272196442358e-09
data8 0xBE8C4D9E69C10E02             //A13 = -2.10875261143659275328e-07
data8 0x3EC9CF2F84566725             //A12 = +3.07671055805877356583e-06
data8 0xBF007980B1B46A4D             //A11 = -3.14228438702169818945e-05
data8 0x3F2F4C3AD6DEF24A             //A10 = +2.38783056770846320260e-04
data8 0xBF56F5129F8D30FA             //A9 = -1.40120333363130546426e-03
data8 0x3F7AA6C7ABFC38EE             //A8 = +6.50671002200751820429e-03
data8 0xBF98E7522CB84BEF             //A7 = -2.43199195666185511109e-02
data8 0x3FB2F68EB1C3D073             //A6 = +7.40746673580490638637e-02
data8 0xBFC7C16055AC6385             //A5 = -1.85588876564704611769e-01
data8 0x3FD8A707AEF5A440             //A4 = +3.85194702967570635211e-01
data8 0xBFE547BFE39AE2EA             //A3 = -6.65008492032112467310e-01
data8 0x3FEE7C91BDF13578             //A2 = +9.52706213932898128515e-01
data8 0xBFF1CB5B61F8C589             //A1 = -1.11214769621105541214e+00
data8 0x3FEFEA56BC81FD37             //A0 = +9.97355812243688815239e-01
// Pol_2
data8 0xBD302724A12F46E0             //A15 = -5.73866382814058809406e-14
data8 0x3D98889B75D3102E             //A14 = +5.57829983681360947356e-12
data8 0xBDF16EA15074A1E9             //A13 = -2.53671153922423457844e-10
data8 0x3E3EC6E688CFEE5F             //A12 = +7.16581828336436419561e-09
data8 0xBE82E5ED44C52609             //A11 = -1.40802202239825487803e-07
data8 0x3EC120BE5CE42353             //A10 = +2.04180535157522081699e-06
data8 0xBEF7B8B0311A1911             //A9 = -2.26225266204633600888e-05
data8 0x3F29A281F43FC238             //A8 = +1.95577968156184077632e-04
data8 0xBF55E19858B3B7A4             //A7 = -1.33552434527526534043e-03
data8 0x3F7DAC8C3D12E5FD             //A6 = +7.24463253680473816303e-03
data8 0xBF9FF9C04613FB47             //A5 = -3.12261622211693854028e-02
data8 0x3FBB3D5DBF9D9366             //A4 = +1.06405123978743883370e-01
data8 0xBFD224DE9F62C258             //A3 = -2.83500342989133623476e-01
data8 0x3FE28A95CB8C6D3E             //A2 = +5.79417131000276437708e-01
data8 0xBFEC21205D358672             //A1 = -8.79043752717008257224e-01
data8 0x3FEDAE44D5EDFE5B             //A0 = +9.27523057776805771830e-01
// Pol_3
data8 0xBCA3BCA734AC82F1             //A15 = -1.36952437983096410260e-16
data8 0x3D16740DC3990612             //A14 = +1.99425676175410093285e-14
data8 0xBD77F4353812C46A             //A13 = -1.36162367755616790260e-12
data8 0x3DCFD0BE13C73DB4             //A12 = +5.78718761040355136007e-11
data8 0xBE1D728DF71189B4             //A11 = -1.71406885583934105120e-09
data8 0x3E64252C8CB710B5             //A10 = +3.75233795940731111303e-08
data8 0xBEA514B93180F33D             //A9 = -6.28261292774310809962e-07
data8 0x3EE1381118CC7151             //A8 = +8.21066421390821904504e-06
data8 0xBF1634404FB0FA72             //A7 = -8.47019436358372148764e-05
data8 0x3F46B2CBBCF0EB32             //A6 = +6.92700845213200923490e-04
data8 0xBF725C2B445E6D81             //A5 = -4.48243046949004063741e-03
data8 0x3F974E7CFA4D89D9             //A4 = +2.27603462002522228717e-02
data8 0xBFB6D7BAC2E342D1             //A3 = -8.92292714882032736443e-02
data8 0x3FD0D156AD9CE2A6             //A2 = +2.62777013343603696631e-01
data8 0xBFE1C228572AADB0             //A1 = -5.54950876471982857725e-01
data8 0x3FE8A739F48B9A3B             //A0 = +7.70413377406675619766e-01
LOCAL_OBJECT_END(erfc_p_table)


.section .text
GLOBAL_LIBM_ENTRY(erfcf)

// Form index i for table erfc_p_table as exponent of x
// We use i + bias in real calculations
{ .mlx
      getf.exp       GR_IndxPlusBias = f8          // (sign + exp + bias) of x
      movl           exp_GR_sig_inv_ln2 = 0xb8aa3b295c17f0bc //signif.of 1/ln2
}
{ .mlx
      addl           EXP_AD_TB1    = @ltoff(exp_table_1), gp
      movl           exp_GR_rshf_2to56 = 0x4768000000000000 // 1.100 2^(63+56)
}
;;

// Form argument EXP_NORM_f8 for exp(-x^2)
{ .mfi
      ld8            EXP_AD_TB1    = [EXP_AD_TB1]
      fcmp.ge.s1     p6,p7 = f8, f0                     // p6: x >= 0 ,p7: x<0
      mov            GR_BIAS = 0x0FFFF
}
{ .mfi
      mov            exp_GR_exp_2tom56 = 0xffff-56
      fnma.s1        EXP_NORM_f8   = f8, f8, f0                       //  -x^2
      mov            GR_ExpMask  = 0x1ffff
}
;;

// Form two constants we need
//  1/ln2 * 2^63  to compute  w = x * 1/ln2 * 128
//  1.1000..000 * 2^(63+63-7) to right shift int(w) into the significand

// p9:  x = 0,+inf,-inf,nan,unnorm.
// p10: x!= 0,+inf,-inf,nan,unnorm.
{ .mfi
      setf.sig       EXP_INV_LN2_2TO63 = exp_GR_sig_inv_ln2 // Form 1/ln2*2^63
      fclass.m       p9,p10 = f8,0xef
      shl            GR_ShftPi_bias = GR_BIAS, 7
}
{ .mfi
      setf.d         EXP_RSHF_2TO56 = exp_GR_rshf_2to56 //Const 1.10*2^(63+56)
      nop.f          0
      and            GR_IndxPlusBias = GR_IndxPlusBias, GR_ExpMask // i + bias
}
;;

{ .mfi
      alloc          r32 = ar.pfs, 0, 15, 4, 0
(p6)  fma.s1         FR_AbsArg = f1, f0, f8                  // |x| if x >= 0
      cmp.lt         p15,p0 = GR_IndxPlusBias, GR_BIAS//p15: i < 0 (for |x|<1)
}
{ .mlx
      setf.exp       EXP_2TOM56 = exp_GR_exp_2tom56 //2^-56 for scaling Nfloat
      movl           exp_GR_rshf = 0x43e8000000000000 //1.10 2^63,right shift.
}
;;

{ .mfi
      ldfps          FR_POS_ARG_ASYMP, FR_NEG_ARG_ASYMP = [EXP_AD_TB1],8
      nop.f          0
(p15) mov            GR_IndxPlusBias = GR_BIAS            //Let i = 0 if i < 0
}
{ .mlx
      mov            GR_P_POINT_3 = 0x1A0
      movl           GR_05 = 0x3fe0000000000000
}
;;

// Form shift GR_ShftPi from the beginning of erfc_p_table
// to the polynomial with number i
{ .mfi
      ldfps          FR_UnfBound, FR_EpsNorm = [EXP_AD_TB1],8
      nop.f          0
      shl            GR_ShftPi = GR_IndxPlusBias, 7
}
{ .mfi
      setf.d         EXP_RSHF = exp_GR_rshf   // Form right shift 1.100 * 2^63
(p7)  fms.s1         FR_AbsArg = f1, f0, f8                   // |x|  if x < 0
      mov            exp_TB1_size  = 0x100
}
;;

// Form pointer GR_P_POINT_3 to the beginning of erfc_p_table
{ .mfi
      setf.d         FR_05 = GR_05
      nop.f          0
      sub            GR_ShftPi = GR_ShftPi,GR_ShftPi_bias
}
{ .mfb
      add            GR_P_POINT_3 = GR_P_POINT_3, EXP_AD_TB1
      nop.f          0
(p9)  br.cond.spnt   SPECIAL                  // For x = 0,+inf,-inf,nan,unnorm
}
;;

{ .mfi
      add            GR_P_POINT_1 = GR_P_POINT_3, GR_ShftPi
      nop.f          0
      add            GR_P_POINT_2 = GR_P_POINT_3, GR_ShftPi
}
{ .mfi
      ldfe           exp_ln2_by_128_hi  = [EXP_AD_TB1],16
      fma.s1         FR_NormX = f8,f1,f0
      add            GR_P_POINT_3 = GR_P_POINT_3, GR_ShftPi
}
;;

// Load coefficients for polynomial P15(x)
{ .mfi
      ldfpd          FR_A15, FR_A14 = [GR_P_POINT_1], 16
      nop.f          0
      add            GR_P_POINT_3 = 0x30, GR_P_POINT_3
}
{ .mfi
      ldfe           exp_ln2_by_128_lo  = [EXP_AD_TB1], 16
      nop.f          0
      add            GR_P_POINT_2 = 0x20, GR_P_POINT_2
}
;;

// Now EXP_AD_TB1 points to the beginning of table 1
{ .mlx
      ldfpd          FR_A13, FR_A12 = [GR_P_POINT_1]
      movl           GR_1_by_6 = 0x3FC5555555555555
}
{ .mfi
      add            GR_P_POINT_4 = 0x30, GR_P_POINT_2
      nop.f          0
      nop.i          0
}
;;

{ .mfi
      ldfpd          FR_A11, FR_A10 = [GR_P_POINT_2]
      fma.s1         FR_2 = f1, f1, f1
      mov            exp_TB2_size  = 0x80
}
{ .mfi
      ldfpd          FR_A9, FR_A8 = [GR_P_POINT_3],16
      nop.f          0
      add            GR_P_POINT_1 = 0x60 ,GR_P_POINT_1
}
;;

// W = X * Inv_log2_by_128
// By adding 1.10...0*2^63 we shift and get round_int(W) in significand.
// We actually add 1.10...0*2^56 to X * Inv_log2 to do the same thing.
{ .mfi
      ldfpd          FR_A7, FR_A6 = [GR_P_POINT_3]
      fma.s1     EXP_W_2TO56_RSH = EXP_NORM_f8,EXP_INV_LN2_2TO63,EXP_RSHF_2TO56
      add            EXP_AD_TB2 = exp_TB1_size, EXP_AD_TB1

}
{ .mfi
      ldfpd          FR_A5, FR_A4 = [GR_P_POINT_4], 16
      nop.f          0
      nop.i          0
}
;;

{ .mfi
      ldfpd          FR_A3, FR_A2 = [GR_P_POINT_4]
      fmerge.s       FR_X = f8,f8
      nop.i          0
}
{ .mfi
      ldfpd          FR_A1, FR_A0 = [GR_P_POINT_1]
      nop.f          0
      nop.i          0
}
;;

//p14: x < - NEG_ARG_ASYMP = -4.4 -> erfcf(x) ~=~ 2.0
{ .mfi
      setf.d         FR_1_by_6  = GR_1_by_6
(p7)  fcmp.gt.unc.s1 p14,p0 = FR_AbsArg, FR_NEG_ARG_ASYMP          //p7: x < 0
      nop.i          0
}
;;

//p15: x > POS_ARG_ASYMP = 10.06 -> erfcf(x) ~=~ 0.0
{ .mfi
      nop.m          0
(p6)  fcmp.gt.unc.s1 p15,p0 = FR_AbsArg, FR_POS_ARG_ASYMP          //p6: x > 0
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fcmp.le.s1     p8,p0 = FR_NormX, FR_UnfBound        // p8: x <= UnfBound
      nop.i          0
}
{ .mfb
      nop.m          0
(p14) fnma.s.s0      FR_RESULT = FR_EpsNorm, FR_EpsNorm, FR_2//y = 2 if x <-4.4
(p14) br.ret.spnt    b0
}
;;

// Nfloat = round_int(W)
// The signficand of EXP_W_2TO56_RSH contains the rounded integer part of W,
// as a twos complement number in the lower bits (that is, it may be negative).
// That twos complement number (called N) is put into exp_GR_N.

// Since EXP_W_2TO56_RSH is scaled by 2^56, it must be multiplied by 2^-56
// before the shift constant 1.10000 * 2^63 is subtracted to yield EXP_Nfloat.
// Thus, EXP_Nfloat contains the floating point version of N

{ .mfi
      nop.m          0
      fms.s1         EXP_Nfloat = EXP_W_2TO56_RSH, EXP_2TOM56, EXP_RSHF
      nop.i          0
}
{ .mfb
(p15) mov            GR_Parameter_TAG = 209
(p15) fma.s.s0       FR_RESULT = FR_EpsNorm,FR_EpsNorm,f0 //Result.for x>10.06
(p15) br.cond.spnt   __libm_error_region
}
;;

// Now we can calculate polynomial P15(x)
{ .mfi
      nop.m          0
      fma.s1         FR_P15_1_1 = FR_AbsArg, FR_AbsArg, f0             // x ^2
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         FR_P15_0_1 = FR_A15, FR_AbsArg, FR_A14
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_P15_1_2 = FR_A13, FR_AbsArg, FR_A12
      nop.i          0
}
;;

{ .mfi
      getf.sig       exp_GR_N        = EXP_W_2TO56_RSH
      fma.s1         FR_P15_2_1 = FR_A9, FR_AbsArg, FR_A8
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         FR_P15_2_2 = FR_A11, FR_AbsArg, FR_A10
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_P15_3_1 = FR_A5, FR_AbsArg, FR_A4
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         FR_P15_3_2 = FR_A7, FR_AbsArg, FR_A6
      nop.i          0
}
;;

// exp_GR_index_1 has index_1
// exp_GR_index_2_16 has index_2 * 16
// exp_GR_biased_M has M
// exp_GR_index_1_16 has index_1 * 16

// r2 has true M
{ .mfi
      and            exp_GR_index_1 = 0x0f, exp_GR_N
      fma.s1         FR_P15_4_1 = FR_A1, FR_AbsArg, FR_A0
      shr            r2 = exp_GR_N,  0x7

}
{ .mfi
      and            exp_GR_index_2_16 = 0x70, exp_GR_N
      fma.s1         FR_P15_4_2 = FR_A3, FR_AbsArg, FR_A2
      nop.i          0
}
;;

// EXP_AD_T1 has address of T1
// EXP_AD_T2 has address if T2

{ .mfi
      add            EXP_AD_T2 = EXP_AD_TB2, exp_GR_index_2_16
      nop.f          0
      shladd         EXP_AD_T1 = exp_GR_index_1, 4, EXP_AD_TB1
}
{ .mfi
      addl           exp_GR_biased_M = 0xffff, r2
      fnma.s1        exp_r   = EXP_Nfloat, exp_ln2_by_128_hi, EXP_NORM_f8
      nop.i          0
}
;;

// Create Scale = 2^M
// r = x - Nfloat * ln2_by_128_hi

{ .mfi
      setf.exp       EXP_2M = exp_GR_biased_M
      fma.s1         FR_P15_7_1 = FR_P15_0_1, FR_P15_1_1, FR_P15_1_2
      nop.i          0
}
{ .mfi
      ldfe           exp_T2  = [EXP_AD_T2]
      nop.f          0
      nop.i          0
}
;;

// Load T1 and T2

{ .mfi
      ldfe           exp_T1  = [EXP_AD_T1]
      fma.s1         FR_P15_7_2 = FR_P15_1_1, FR_P15_1_1, f0            // x^4
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         FR_P15_8_1 = FR_P15_1_1, FR_P15_2_2, FR_P15_2_1
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_P15_9_1 = FR_P15_1_1, FR_P15_4_2, FR_P15_4_1
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         FR_P15_9_2 = FR_P15_1_1, FR_P15_3_2, FR_P15_3_1
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         exp_P = FR_1_by_6, exp_r, FR_05
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         exp_rsq = exp_r, exp_r, f0
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_P15_13_1 = FR_P15_7_2, FR_P15_7_1, FR_P15_8_1
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_P15_14_1 = FR_P15_7_2, FR_P15_9_2, FR_P15_9_1
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         FR_P15_14_2 = FR_P15_7_2, FR_P15_7_2, f0           // x^8
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         exp_P     = exp_P, exp_rsq, exp_r
      nop.i          0
}
{ .mfi
      nop.m          0
      fma.s1         exp_S1  = EXP_2M, exp_T2, f0
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_Pol = FR_P15_14_2, FR_P15_13_1, FR_P15_14_1  // P15(x)
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         exp_S   = exp_S1, exp_T1, f0
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s1         FR_Exp = exp_S, exp_P, exp_S                 // exp(-x^2)
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fma.s.s0       FR_Tmpf = f8, f1, f0                          //  Flag  d
      nop.i          0
}
;;

//p6: result for     0 < x < = POS_ARG_ASYMP
//p7: result for   - NEG_ARG_ASYMP  <= x < 0
//p8: exit   for   - NEG_ARG_ASYMP <= x <= UnfBound, x!=0
.pred.rel "mutex",p6,p7
{ .mfi
      nop.m          0
(p6)  fma.s.s0       f8 = FR_Exp, FR_Pol, f0
      nop.i          0
}
{ .mfb
      mov            GR_Parameter_TAG = 209
(p7)  fnma.s.s0      f8 = FR_Exp, FR_Pol, FR_2
(p8)  br.ret.sptk    b0
}
;;

//p10: branch for  UnfBound < x < = POS_ARG_ASYMP
{ .mfb
      nop.m          0
      nop.f          0
(p10) br.cond.spnt   __libm_error_region
}
;;

//Only via (p9)  br.cond.spnt   SPECIAL  for x = 0,+inf,-inf,nan,unnorm
SPECIAL:

{ .mfi
      nop.m          0
      fclass.m.unc   p10,p0 = f8,0x07                            // p10: x = 0
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fclass.m.unc   p11,p0 = f8,0x21                         // p11: x = +inf
      nop.i          0
}
;;

{ .mfi
      nop.m          0
      fclass.m.unc   p12,p0 = f8,0x22                          // p12 x = -inf
      nop.i          0
}
{ .mfb
      nop.m          0
(p10) fma.s.s0       f8 = f1, f1, f0
(p10) br.ret.sptk    b0                                // Quick exit for x = 0
}
;;

{ .mfi
      nop.m          0
      fclass.m.unc   p13,p0 = f8,0xc3                          // p13: x = nan
      nop.i          0
}
{ .mfb
      nop.m          0
(p11) fma.s.s0       f8 = f0, f1, f0
(p11) br.ret.spnt    b0                             // Quick exit for x = +inf
}
;;
{ .mfi
      nop.m          0
      fclass.m.unc   p14,p0 = f8,0x0b                 // P14: x = unnormalized
      nop.i          0
}
{ .mfb
      nop.m          0
(p12) fma.s.s0       f8 = f1, f1, f1
(p12) br.ret.spnt    b0                             // Quick exit for x = -inf
}
;;

{ .mfb
      nop.m          0
(p13) fma.s.s0       f8 = f8, f1, f0
(p13) br.ret.sptk    b0                              // Quick exit for x = nan
}
;;

{ .mfb
      nop.m          0
(p14) fnma.s.s0      f8 = f8, f1, f1
(p14) br.ret.sptk    b0                     // Quick exit for x = unnormalized
}
;;

GLOBAL_LIBM_END(erfcf)


// Call via (p10) br.cond.spnt   __libm_error_region
//          for  UnfBound < x < = POS_ARG_ASYMP
// and
//
// call via (p15) br.cond.spnt   __libm_error_region
//          for  x > POS_ARG_ASYMP

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
        stfs [GR_Parameter_Y] = FR_Y,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
        stfs [GR_Parameter_X] = FR_X             // STORE Parameter 1 on stack
        add   GR_Parameter_RESULT = 0,GR_Parameter_Y    // Parameter 3 address
        nop.b 0
}
{ .mib
        stfs [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 0
        nop.m 0
        add   GR_Parameter_RESULT = 48,sp
};;
{ .mmi
        ldfs  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#



