]> Cypherpunks.ru repositories - gostls13.git/blob - src/math/atan_s390x.s
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / math / atan_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 ·atanrodataL8<> + 0(SB)/8, $0.199999999999554423E+00
9 DATA ·atanrodataL8<> + 8(SB)/8, $0.111111110136634272E+00
10 DATA ·atanrodataL8<> + 16(SB)/8, $-.142857142828026806E+00
11 DATA ·atanrodataL8<> + 24(SB)/8, $-.333333333333330928E+00
12 DATA ·atanrodataL8<> + 32(SB)/8, $0.769228118888682505E-01
13 DATA ·atanrodataL8<> + 40(SB)/8, $0.588059263575587687E-01
14 DATA ·atanrodataL8<> + 48(SB)/8, $-.666641501287528609E-01
15 DATA ·atanrodataL8<> + 56(SB)/8, $-.909090711945939878E-01
16 DATA ·atanrodataL8<> + 64(SB)/8, $0.472329433805024762E-01
17 DATA ·atanrodataL8<> + 72(SB)/8, $0.366935664549587481E-01
18 DATA ·atanrodataL8<> + 80(SB)/8, $-.422172007412067035E-01
19 DATA ·atanrodataL8<> + 88(SB)/8, $-.299856214685512712E-01
20 DATA ·atanrodataL8<> + 96(SB)/8, $0.220852012160300086E-01
21 DATA ·atanrodataL8<> + 104(SB)/8, $0.726338160757602439E-02
22 DATA ·atanrodataL8<> + 112(SB)/8, $0.843488472994227321E-03
23 DATA ·atanrodataL8<> + 120(SB)/8, $0.134893651284712515E-04
24 DATA ·atanrodataL8<> + 128(SB)/8, $-.525380587584426406E-01
25 DATA ·atanrodataL8<> + 136(SB)/8, $-.139950258898989925E-01
26 DATA ·atanrodataL8<> + 144(SB)/8, $-.291935324869629616E-02
27 DATA ·atanrodataL8<> + 152(SB)/8, $-.154797890856877418E-03
28 GLOBL ·atanrodataL8<> + 0(SB), RODATA, $160
29
30 DATA ·atanxpi2h<> + 0(SB)/8, $0x3ff330e4e4fa7b1b
31 DATA ·atanxpi2h<> + 8(SB)/8, $0xbff330e4e4fa7b1b
32 DATA ·atanxpi2h<> + 16(SB)/8, $0x400330e4e4fa7b1b
33 DATA ·atanxpi2h<> + 24(SB)/4, $0xc00330e4e4fa7b1b
34 GLOBL ·atanxpi2h<> + 0(SB), RODATA, $32
35 DATA ·atanxpim<> + 0(SB)/8, $0x3ff4f42b00000000
36 GLOBL ·atanxpim<> + 0(SB), RODATA, $8
37 DATA ·atanxmone<> + 0(SB)/8, $-1.0
38 GLOBL ·atanxmone<> + 0(SB), RODATA, $8
39
40 // Atan returns the arctangent, in radians, of the argument.
41 //
42 // Special cases are:
43 //      Atan(±0) = ±0
44 //      Atan(±Inf) = ±Pi/2Pi
45 // The algorithm used is minimax polynomial approximation
46 // with coefficients determined with a Remez exchange algorithm.
47
48 TEXT    ·atanAsm(SB), NOSPLIT, $0-16
49         FMOVD   x+0(FP), F0
50         //special case Atan(±0) = ±0
51         FMOVD   $(0.0), F1
52         FCMPU   F0, F1
53         BEQ     atanIsZero
54
55         MOVD    $·atanrodataL8<>+0(SB), R5
56         MOVH    $0x3FE0, R3
57         LGDR    F0, R1
58         RISBGNZ $32, $63, $32, R1, R1
59         RLL     $16, R1, R2
60         ANDW    $0x7FF0, R2
61         MOVW    R2, R6
62         MOVW    R3, R7
63         CMPUBLE R6, R7, L6
64         MOVD    $·atanxmone<>+0(SB), R3
65         FMOVD   0(R3), F2
66         WFDDB   V0, V2, V0
67         RISBGZ  $63, $63, $33, R1, R1
68         MOVD    $·atanxpi2h<>+0(SB), R3
69         MOVWZ   R1, R1
70         SLD     $3, R1, R1
71         WORD    $0x68813000     //ld    %f8,0(%r1,%r3)
72 L6:
73         WFMDB   V0, V0, V2
74         FMOVD   152(R5), F6
75         FMOVD   144(R5), F1
76         FMOVD   136(R5), F7
77         VLEG    $0, 128(R5), V16
78         FMOVD   120(R5), F4
79         FMOVD   112(R5), F5
80         WFMADB  V2, V4, V6, V4
81         WFMADB  V2, V5, V1, V5
82         WFMDB   V2, V2, V6
83         FMOVD   104(R5), F3
84         FMOVD   96(R5), F1
85         WFMADB  V2, V3, V7, V3
86         MOVH    $0x3FE0, R1
87         FMOVD   88(R5), F7
88         WFMADB  V2, V1, V7, V1
89         FMOVD   80(R5), F7
90         WFMADB  V6, V3, V1, V3
91         WFMADB  V6, V4, V5, V4
92         WFMDB   V6, V6, V1
93         FMOVD   72(R5), F5
94         WFMADB  V2, V5, V7, V5
95         FMOVD   64(R5), F7
96         WFMADB  V2, V7, V16, V7
97         VLEG    $0, 56(R5), V16
98         WFMADB  V6, V5, V7, V5
99         WFMADB  V1, V4, V3, V4
100         FMOVD   48(R5), F7
101         FMOVD   40(R5), F3
102         WFMADB  V2, V3, V7, V3
103         FMOVD   32(R5), F7
104         WFMADB  V2, V7, V16, V7
105         VLEG    $0, 24(R5), V16
106         WFMADB  V1, V4, V5, V4
107         FMOVD   16(R5), F5
108         WFMADB  V6, V3, V7, V3
109         FMOVD   8(R5), F7
110         WFMADB  V2, V7, V5, V7
111         FMOVD   0(R5), F5
112         WFMADB  V2, V5, V16, V5
113         WFMADB  V1, V4, V3, V4
114         WFMADB  V6, V7, V5, V6
115         FMUL    F0, F2
116         FMADD   F4, F1, F6
117         FMADD   F6, F2, F0
118         MOVW    R2, R6
119         MOVW    R1, R7
120         CMPUBLE R6, R7, L1
121         MOVD    $·atanxpim<>+0(SB), R1
122         WORD    $0xED801000     //madb  %f0,%f8,0(%r1)
123         BYTE    $0x00
124         BYTE    $0x1E
125 L1:
126 atanIsZero:
127         FMOVD   F0, ret+8(FP)
128         RET