atanh_s390x.s raw

   1  // Copyright 2017 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  #include "textflag.h"
   6  
   7  // Minimax polynomial coefficients and other constants
   8  DATA ·atanhrodataL10<> + 0(SB)/8, $.41375273347623353626
   9  DATA ·atanhrodataL10<> + 8(SB)/8, $.51487302528619766235E+04
  10  DATA ·atanhrodataL10<> + 16(SB)/8, $-1.67526912689208984375
  11  DATA ·atanhrodataL10<> + 24(SB)/8, $0.181818181818181826E+00
  12  DATA ·atanhrodataL10<> + 32(SB)/8, $-.165289256198351540E-01
  13  DATA ·atanhrodataL10<> + 40(SB)/8, $0.200350613573012186E-02
  14  DATA ·atanhrodataL10<> + 48(SB)/8, $0.397389654305194527E-04
  15  DATA ·atanhrodataL10<> + 56(SB)/8, $-.273205381970859341E-03
  16  DATA ·atanhrodataL10<> + 64(SB)/8, $0.938370938292558173E-06
  17  DATA ·atanhrodataL10<> + 72(SB)/8, $-.148682720127920854E-06
  18  DATA ·atanhrodataL10<> + 80(SB)/8, $ 0.212881813645679599E-07
  19  DATA ·atanhrodataL10<> + 88(SB)/8, $-.602107458843052029E-05
  20  DATA ·atanhrodataL10<> + 96(SB)/8, $-5.5
  21  DATA ·atanhrodataL10<> + 104(SB)/8, $-0.5
  22  DATA ·atanhrodataL10<> + 112(SB)/8, $0.0
  23  DATA ·atanhrodataL10<> + 120(SB)/8, $0x7ff8000000000000      //Nan
  24  DATA ·atanhrodataL10<> + 128(SB)/8, $-1.0
  25  DATA ·atanhrodataL10<> + 136(SB)/8, $1.0
  26  DATA ·atanhrodataL10<> + 144(SB)/8, $1.0E-20
  27  GLOBL ·atanhrodataL10<> + 0(SB), RODATA, $152
  28  
  29  // Table of log correction terms
  30  DATA ·atanhtab2076<> + 0(SB)/8, $0.585235384085551248E-01
  31  DATA ·atanhtab2076<> + 8(SB)/8, $0.412206153771168640E-01
  32  DATA ·atanhtab2076<> + 16(SB)/8, $0.273839003221648339E-01
  33  DATA ·atanhtab2076<> + 24(SB)/8, $0.166383778368856480E-01
  34  DATA ·atanhtab2076<> + 32(SB)/8, $0.866678223433169637E-02
  35  DATA ·atanhtab2076<> + 40(SB)/8, $0.319831684989627514E-02
  36  DATA ·atanhtab2076<> + 48(SB)/8, $0.000000000000000000E+00
  37  DATA ·atanhtab2076<> + 56(SB)/8, $-.113006378583725549E-02
  38  DATA ·atanhtab2076<> + 64(SB)/8, $-.367979419636602491E-03
  39  DATA ·atanhtab2076<> + 72(SB)/8, $0.213172484510484979E-02
  40  DATA ·atanhtab2076<> + 80(SB)/8, $0.623271047682013536E-02
  41  DATA ·atanhtab2076<> + 88(SB)/8, $0.118140812789696885E-01
  42  DATA ·atanhtab2076<> + 96(SB)/8, $0.187681358930914206E-01
  43  DATA ·atanhtab2076<> + 104(SB)/8, $0.269985148668178992E-01
  44  DATA ·atanhtab2076<> + 112(SB)/8, $0.364186619761331328E-01
  45  DATA ·atanhtab2076<> + 120(SB)/8, $0.469505379381388441E-01
  46  GLOBL ·atanhtab2076<> + 0(SB), RODATA, $128
  47  
  48  // Table of +/- .5
  49  DATA ·atanhtabh2075<> + 0(SB)/8, $0.5
  50  DATA ·atanhtabh2075<> + 8(SB)/8, $-.5
  51  GLOBL ·atanhtabh2075<> + 0(SB), RODATA, $16
  52  
  53  // Atanh returns the inverse hyperbolic tangent of the argument.
  54  //
  55  // Special cases are:
  56  //      Atanh(1) = +Inf
  57  //      Atanh(±0) = ±0
  58  //      Atanh(-1) = -Inf
  59  //      Atanh(x) = NaN if x < -1 or x > 1
  60  //      Atanh(NaN) = NaN
  61  // The algorithm used is minimax polynomial approximation
  62  // with coefficients determined with a Remez exchange algorithm.
  63  
  64  TEXT    ·atanhAsm(SB), NOSPLIT, $0-16
  65  	FMOVD   x+0(FP), F0
  66  	MOVD    $·atanhrodataL10<>+0(SB), R5
  67  	LGDR    F0, R1
  68  	WORD    $0xC0393FEF //iilf  %r3,1072693247
  69  	BYTE    $0xFF
  70  	BYTE    $0xFF
  71  	SRAD    $32, R1
  72  	WORD    $0xB9170021 //llgtr %r2,%r1
  73  	MOVW    R2, R6
  74  	MOVW    R3, R7
  75  	CMPBGT  R6, R7, L2
  76  	WORD    $0xC0392FFF //iilf  %r3,805306367
  77  	BYTE    $0xFF
  78  	BYTE    $0xFF
  79  	MOVW    R2, R6
  80  	MOVW    R3, R7
  81  	CMPBGT  R6, R7, L9
  82  L3:
  83  	FMOVD   144(R5), F2
  84  	FMADD   F2, F0, F0
  85  L1:
  86  	FMOVD   F0, ret+8(FP)
  87  	RET
  88  
  89  L2:
  90  	WORD    $0xED005088 //cdb   %f0,.L12-.L10(%r5)
  91  	BYTE    $0x00
  92  	BYTE    $0x19
  93  	BEQ L5
  94  	WORD    $0xED005080 //cdb   %f0,.L13-.L10(%r5)
  95  	BYTE    $0x00
  96  	BYTE    $0x19
  97  	BEQ L5
  98  	WFCEDBS V0, V0, V2
  99  	BVS L1
 100  	FMOVD   120(R5), F0
 101  	BR  L1
 102  L5:
 103  	WORD    $0xED005070 //ddb   %f0,.L15-.L10(%r5)
 104  	BYTE    $0x00
 105  	BYTE    $0x1D
 106  	FMOVD   F0, ret+8(FP)
 107  	RET
 108  
 109  L9:
 110  	FMOVD   F0, F2
 111  	MOVD    $·atanhtabh2075<>+0(SB), R2
 112  	SRW $31, R1, R1
 113  	FMOVD   104(R5), F4
 114  	MOVW    R1, R1
 115  	SLD $3, R1, R1
 116  	WORD    $0x68012000 //ld    %f0,0(%r1,%r2)
 117  	WFMADB  V2, V4, V0, V4
 118  	VLEG    $0, 96(R5), V16
 119  	FDIV    F4, F2
 120  	WORD    $0xC0298006 //iilf  %r2,2147909631
 121  	BYTE    $0x7F
 122  	BYTE    $0xFF
 123  	FMOVD   88(R5), F6
 124  	FMOVD   80(R5), F1
 125  	FMOVD   72(R5), F7
 126  	FMOVD   64(R5), F5
 127  	FMOVD   F2, F4
 128  	WORD    $0xED405088 //adb   %f4,.L12-.L10(%r5)
 129  	BYTE    $0x00
 130  	BYTE    $0x1A
 131  	LGDR    F4, R4
 132  	SRAD    $32, R4
 133  	FMOVD   F4, F3
 134  	WORD    $0xED305088 //sdb   %f3,.L12-.L10(%r5)
 135  	BYTE    $0x00
 136  	BYTE    $0x1B
 137  	SUBW    R4, R2
 138  	WFSDB   V3, V2, V3
 139  	RISBGZ  $32, $47, $0, R2, R1
 140  	SLD $32, R1, R1
 141  	LDGR    R1, F2
 142  	WFMADB  V4, V2, V16, V4
 143  	SRAW    $8, R2, R1
 144  	WFMADB  V4, V5, V6, V5
 145  	WFMDB   V4, V4, V6
 146  	WFMADB  V4, V1, V7, V1
 147  	WFMADB  V2, V3, V4, V2
 148  	WFMADB  V1, V6, V5, V1
 149  	FMOVD   56(R5), F3
 150  	FMOVD   48(R5), F5
 151  	WFMADB  V4, V5, V3, V4
 152  	FMOVD   40(R5), F3
 153  	FMADD   F1, F6, F4
 154  	FMOVD   32(R5), F1
 155  	FMADD   F3, F2, F1
 156  	ANDW    $0xFFFFFF00, R1
 157  	WFMADB  V6, V4, V1, V6
 158  	FMOVD   24(R5), F3
 159  	ORW $0x45000000, R1
 160  	WFMADB  V2, V6, V3, V6
 161  	VLVGF   $0, R1, V4
 162  	LDEBR   F4, F4
 163  	RISBGZ  $57, $60, $51, R2, R2
 164  	MOVD    $·atanhtab2076<>+0(SB), R1
 165  	FMOVD   16(R5), F3
 166  	WORD    $0x68521000 //ld    %f5,0(%r2,%r1)
 167  	FMOVD   8(R5), F1
 168  	WFMADB  V2, V6, V5, V2
 169  	WFMADB  V4, V3, V1, V4
 170  	FMOVD   0(R5), F6
 171  	FMADD   F6, F4, F2
 172  	FMUL    F2, F0
 173  	FMOVD   F0, ret+8(FP)
 174  	RET
 175