]> Cypherpunks.ru repositories - gostls13.git/blob - src/math/atanh_s390x.s
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / math / atanh_s390x.s
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