Text file
src/math/asin_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 ·asinrodataL15<> + 0(SB)/8, $-1.309611320495605469
9 DATA ·asinrodataL15<> + 8(SB)/8, $0x3ff921fb54442d18
10 DATA ·asinrodataL15<> + 16(SB)/8, $0xbff921fb54442d18
11 DATA ·asinrodataL15<> + 24(SB)/8, $1.309611320495605469
12 DATA ·asinrodataL15<> + 32(SB)/8, $-0.0
13 DATA ·asinrodataL15<> + 40(SB)/8, $1.199437040755305217
14 DATA ·asinrodataL15<> + 48(SB)/8, $0.166666666666651626E+00
15 DATA ·asinrodataL15<> + 56(SB)/8, $0.750000000042621169E-01
16 DATA ·asinrodataL15<> + 64(SB)/8, $0.446428567178116477E-01
17 DATA ·asinrodataL15<> + 72(SB)/8, $0.303819660378071894E-01
18 DATA ·asinrodataL15<> + 80(SB)/8, $0.223715011892010405E-01
19 DATA ·asinrodataL15<> + 88(SB)/8, $0.173659424522364952E-01
20 DATA ·asinrodataL15<> + 96(SB)/8, $0.137810186504372266E-01
21 DATA ·asinrodataL15<> + 104(SB)/8, $0.134066870961173521E-01
22 DATA ·asinrodataL15<> + 112(SB)/8, $-.412335502831898721E-02
23 DATA ·asinrodataL15<> + 120(SB)/8, $0.867383739532082719E-01
24 DATA ·asinrodataL15<> + 128(SB)/8, $-.328765950607171649E+00
25 DATA ·asinrodataL15<> + 136(SB)/8, $0.110401073869414626E+01
26 DATA ·asinrodataL15<> + 144(SB)/8, $-.270694366992537307E+01
27 DATA ·asinrodataL15<> + 152(SB)/8, $0.500196500770928669E+01
28 DATA ·asinrodataL15<> + 160(SB)/8, $-.665866959108585165E+01
29 DATA ·asinrodataL15<> + 168(SB)/8, $-.344895269334086578E+01
30 DATA ·asinrodataL15<> + 176(SB)/8, $0.927437952918301659E+00
31 DATA ·asinrodataL15<> + 184(SB)/8, $0.610487478874645653E+01
32 DATA ·asinrodataL15<> + 192(SB)/8, $0x7ff8000000000000 //+Inf
33 DATA ·asinrodataL15<> + 200(SB)/8, $-1.0
34 DATA ·asinrodataL15<> + 208(SB)/8, $1.0
35 DATA ·asinrodataL15<> + 216(SB)/8, $1.00000000000000000e-20
36 GLOBL ·asinrodataL15<> + 0(SB), RODATA, $224
37
38 // Asin returns the arcsine, in radians, of the argument.
39 //
40 // Special cases are:
41 // Asin(±0) = ±0=
42 // Asin(x) = NaN if x < -1 or x > 1
43 // The algorithm used is minimax polynomial approximation
44 // with coefficients determined with a Remez exchange algorithm.
45
46 TEXT ·asinAsm(SB), NOSPLIT, $0-16
47 FMOVD x+0(FP), F0
48 MOVD $·asinrodataL15<>+0(SB), R9
49 LGDR F0, R7
50 FMOVD F0, F8
51 SRAD $32, R7
52 WORD $0xC0193FE6 //iilf %r1,1072079005
53 BYTE $0xA0
54 BYTE $0x9D
55 WORD $0xB91700C7 //llgtr %r12,%r7
56 MOVW R12, R8
57 MOVW R1, R6
58 CMPBGT R8, R6, L2
59 WORD $0xC0193BFF //iilf %r1,1006632959
60 BYTE $0xFF
61 BYTE $0xFF
62 MOVW R1, R6
63 CMPBGT R8, R6, L13
64 L3:
65 FMOVD 216(R9), F0
66 FMADD F0, F8, F8
67 L1:
68 FMOVD F8, ret+8(FP)
69 RET
70 L2:
71 WORD $0xC0193FEF //iilf %r1,1072693247
72 BYTE $0xFF
73 BYTE $0xFF
74 CMPW R12, R1
75 BLE L14
76 L5:
77 WORD $0xED0090D0 //cdb %f0,.L17-.L15(%r9)
78 BYTE $0x00
79 BYTE $0x19
80 BEQ L9
81 WORD $0xED0090C8 //cdb %f0,.L18-.L15(%r9)
82 BYTE $0x00
83 BYTE $0x19
84 BEQ L10
85 WFCEDBS V8, V8, V0
86 BVS L1
87 FMOVD 192(R9), F8
88 BR L1
89 L13:
90 WFMDB V0, V0, V10
91 L4:
92 WFMDB V10, V10, V0
93 FMOVD 184(R9), F6
94 FMOVD 176(R9), F2
95 FMOVD 168(R9), F4
96 WFMADB V0, V2, V6, V2
97 FMOVD 160(R9), F6
98 WFMADB V0, V4, V6, V4
99 FMOVD 152(R9), F6
100 WFMADB V0, V2, V6, V2
101 FMOVD 144(R9), F6
102 WFMADB V0, V4, V6, V4
103 FMOVD 136(R9), F6
104 WFMADB V0, V2, V6, V2
105 WORD $0xC0193FE6 //iilf %r1,1072079005
106 BYTE $0xA0
107 BYTE $0x9D
108 FMOVD 128(R9), F6
109 WFMADB V0, V4, V6, V4
110 FMOVD 120(R9), F6
111 WFMADB V0, V2, V6, V2
112 FMOVD 112(R9), F6
113 WFMADB V0, V4, V6, V4
114 FMOVD 104(R9), F6
115 WFMADB V0, V2, V6, V2
116 FMOVD 96(R9), F6
117 WFMADB V0, V4, V6, V4
118 FMOVD 88(R9), F6
119 WFMADB V0, V2, V6, V2
120 FMOVD 80(R9), F6
121 WFMADB V0, V4, V6, V4
122 FMOVD 72(R9), F6
123 WFMADB V0, V2, V6, V2
124 FMOVD 64(R9), F6
125 WFMADB V0, V4, V6, V4
126 FMOVD 56(R9), F6
127 WFMADB V0, V2, V6, V2
128 FMOVD 48(R9), F6
129 WFMADB V0, V4, V6, V0
130 WFMDB V8, V10, V4
131 FMADD F2, F10, F0
132 FMADD F0, F4, F8
133 CMPW R12, R1
134 BLE L1
135 FMOVD 40(R9), F0
136 FMADD F0, F1, F8
137 FMOVD F8, ret+8(FP)
138 RET
139 L14:
140 FMOVD 200(R9), F0
141 FMADD F8, F8, F0
142 WORD $0xB31300A0 //lcdbr %f10,%f0
143 WORD $0xED009020 //cdb %f0,.L39-.L15(%r9)
144 BYTE $0x00
145 BYTE $0x19
146 FSQRT F10, F8
147 L6:
148 MOVW R7, R6
149 CMPBLE R6, $0, L8
150 WORD $0xB3130088 //lcdbr %f8,%f8
151 FMOVD 24(R9), F1
152 BR L4
153 L10:
154 FMOVD 16(R9), F8
155 BR L1
156 L9:
157 FMOVD 8(R9), F8
158 FMOVD F8, ret+8(FP)
159 RET
160 L8:
161 FMOVD 0(R9), F1
162 BR L4
163
View as plain text