Text file
src/math/acosh_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 ·acoshrodataL11<> + 0(SB)/8, $-1.0
9 DATA ·acoshrodataL11<> + 8(SB)/8, $.41375273347623353626
10 DATA ·acoshrodataL11<> + 16(SB)/8, $.51487302528619766235E+04
11 DATA ·acoshrodataL11<> + 24(SB)/8, $-1.67526912689208984375
12 DATA ·acoshrodataL11<> + 32(SB)/8, $0.181818181818181826E+00
13 DATA ·acoshrodataL11<> + 40(SB)/8, $-.165289256198351540E-01
14 DATA ·acoshrodataL11<> + 48(SB)/8, $0.200350613573012186E-02
15 DATA ·acoshrodataL11<> + 56(SB)/8, $-.273205381970859341E-03
16 DATA ·acoshrodataL11<> + 64(SB)/8, $0.397389654305194527E-04
17 DATA ·acoshrodataL11<> + 72(SB)/8, $0.938370938292558173E-06
18 DATA ·acoshrodataL11<> + 80(SB)/8, $-.602107458843052029E-05
19 DATA ·acoshrodataL11<> + 88(SB)/8, $0.212881813645679599E-07
20 DATA ·acoshrodataL11<> + 96(SB)/8, $-.148682720127920854E-06
21 DATA ·acoshrodataL11<> + 104(SB)/8, $-5.5
22 DATA ·acoshrodataL11<> + 112(SB)/8, $0x7ff8000000000000 //Nan
23 GLOBL ·acoshrodataL11<> + 0(SB), RODATA, $120
24
25 // Table of log correction terms
26 DATA ·acoshtab2068<> + 0(SB)/8, $0.585235384085551248E-01
27 DATA ·acoshtab2068<> + 8(SB)/8, $0.412206153771168640E-01
28 DATA ·acoshtab2068<> + 16(SB)/8, $0.273839003221648339E-01
29 DATA ·acoshtab2068<> + 24(SB)/8, $0.166383778368856480E-01
30 DATA ·acoshtab2068<> + 32(SB)/8, $0.866678223433169637E-02
31 DATA ·acoshtab2068<> + 40(SB)/8, $0.319831684989627514E-02
32 DATA ·acoshtab2068<> + 48(SB)/8, $0.0
33 DATA ·acoshtab2068<> + 56(SB)/8, $-.113006378583725549E-02
34 DATA ·acoshtab2068<> + 64(SB)/8, $-.367979419636602491E-03
35 DATA ·acoshtab2068<> + 72(SB)/8, $0.213172484510484979E-02
36 DATA ·acoshtab2068<> + 80(SB)/8, $0.623271047682013536E-02
37 DATA ·acoshtab2068<> + 88(SB)/8, $0.118140812789696885E-01
38 DATA ·acoshtab2068<> + 96(SB)/8, $0.187681358930914206E-01
39 DATA ·acoshtab2068<> + 104(SB)/8, $0.269985148668178992E-01
40 DATA ·acoshtab2068<> + 112(SB)/8, $0.364186619761331328E-01
41 DATA ·acoshtab2068<> + 120(SB)/8, $0.469505379381388441E-01
42 GLOBL ·acoshtab2068<> + 0(SB), RODATA, $128
43
44 // Acosh returns the inverse hyperbolic cosine of the argument.
45 //
46 // Special cases are:
47 // Acosh(+Inf) = +Inf
48 // Acosh(x) = NaN if x < 1
49 // Acosh(NaN) = NaN
50 // The algorithm used is minimax polynomial approximation
51 // with coefficients determined with a Remez exchange algorithm.
52
53 TEXT ·acoshAsm(SB), NOSPLIT, $0-16
54 FMOVD x+0(FP), F0
55 MOVD $·acoshrodataL11<>+0(SB), R9
56 LGDR F0, R1
57 WORD $0xC0295FEF //iilf %r2,1609564159
58 BYTE $0xFF
59 BYTE $0xFF
60 SRAD $32, R1
61 CMPW R1, R2
62 BGT L2
63 WORD $0xC0293FEF //iilf %r2,1072693247
64 BYTE $0xFF
65 BYTE $0xFF
66 CMPW R1, R2
67 BGT L10
68 L3:
69 WFCEDBS V0, V0, V2
70 BVS L1
71 FMOVD 112(R9), F0
72 L1:
73 FMOVD F0, ret+8(FP)
74 RET
75 L2:
76 WORD $0xC0297FEF //iilf %r2,2146435071
77 BYTE $0xFF
78 BYTE $0xFF
79 MOVW R1, R6
80 MOVW R2, R7
81 CMPBGT R6, R7, L1
82 FMOVD F0, F8
83 FMOVD $0, F0
84 WFADB V0, V8, V0
85 WORD $0xC0398006 //iilf %r3,2147909631
86 BYTE $0x7F
87 BYTE $0xFF
88 LGDR F0, R5
89 SRAD $32, R5
90 MOVH $0x0, R1
91 SUBW R5, R3
92 FMOVD $0, F10
93 RISBGZ $32, $47, $0, R3, R4
94 RISBGZ $57, $60, $51, R3, R3
95 BYTE $0x18 //lr %r2,%r4
96 BYTE $0x24
97 RISBGN $0, $31, $32, R4, R1
98 SUBW $0x100000, R2
99 SRAW $8, R2, R2
100 ORW $0x45000000, R2
101 L5:
102 LDGR R1, F0
103 FMOVD 104(R9), F2
104 FMADD F8, F0, F2
105 FMOVD 96(R9), F4
106 WFMADB V10, V0, V2, V0
107 FMOVD 88(R9), F6
108 FMOVD 80(R9), F2
109 WFMADB V0, V6, V4, V6
110 FMOVD 72(R9), F1
111 WFMDB V0, V0, V4
112 WFMADB V0, V1, V2, V1
113 FMOVD 64(R9), F2
114 WFMADB V6, V4, V1, V6
115 FMOVD 56(R9), F1
116 RISBGZ $57, $60, $0, R3, R3
117 WFMADB V0, V2, V1, V2
118 FMOVD 48(R9), F1
119 WFMADB V4, V6, V2, V6
120 FMOVD 40(R9), F2
121 WFMADB V0, V1, V2, V1
122 VLVGF $0, R2, V2
123 WFMADB V4, V6, V1, V4
124 LDEBR F2, F2
125 FMOVD 32(R9), F6
126 WFMADB V0, V4, V6, V4
127 FMOVD 24(R9), F1
128 FMOVD 16(R9), F6
129 MOVD $·acoshtab2068<>+0(SB), R1
130 WFMADB V2, V1, V6, V2
131 FMOVD 0(R3)(R1*1), F3
132 WFMADB V0, V4, V3, V0
133 FMOVD 8(R9), F4
134 FMADD F4, F2, F0
135 FMOVD F0, ret+8(FP)
136 RET
137 L10:
138 FMOVD F0, F8
139 FMOVD 0(R9), F0
140 FMADD F8, F8, F0
141 LTDBR F0, F0
142 FSQRT F0, F10
143 L4:
144 WFADB V10, V8, V0
145 WORD $0xC0398006 //iilf %r3,2147909631
146 BYTE $0x7F
147 BYTE $0xFF
148 LGDR F0, R5
149 SRAD $32, R5
150 MOVH $0x0, R1
151 SUBW R5, R3
152 SRAW $8, R3, R2
153 RISBGZ $32, $47, $0, R3, R4
154 ANDW $0xFFFFFF00, R2
155 RISBGZ $57, $60, $51, R3, R3
156 ORW $0x45000000, R2
157 RISBGN $0, $31, $32, R4, R1
158 BR L5
159
View as plain text