Text file
src/math/cbrt_s390x.s
Documentation: math
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
8DATA ·cbrtrodataL9<> + 0(SB)/8, $-.00016272731015974436E+00
9DATA ·cbrtrodataL9<> + 8(SB)/8, $0.66639548758285293179E+00
10DATA ·cbrtrodataL9<> + 16(SB)/8, $0.55519402697349815993E+00
11DATA ·cbrtrodataL9<> + 24(SB)/8, $0.49338566048766782004E+00
12DATA ·cbrtrodataL9<> + 32(SB)/8, $0.45208160036325611486E+00
13DATA ·cbrtrodataL9<> + 40(SB)/8, $0.43099892837778637816E+00
14DATA ·cbrtrodataL9<> + 48(SB)/8, $1.000244140625
15DATA ·cbrtrodataL9<> + 56(SB)/8, $0.33333333333333333333E+00
16DATA ·cbrtrodataL9<> + 64(SB)/8, $79228162514264337593543950336.
17GLOBL ·cbrtrodataL9<> + 0(SB), RODATA, $72
18
19// Index tables
20DATA ·cbrttab32069<> + 0(SB)/8, $0x404030303020202
21DATA ·cbrttab32069<> + 8(SB)/8, $0x101010101000000
22DATA ·cbrttab32069<> + 16(SB)/8, $0x808070706060605
23DATA ·cbrttab32069<> + 24(SB)/8, $0x505040404040303
24DATA ·cbrttab32069<> + 32(SB)/8, $0xe0d0c0c0b0b0b0a
25DATA ·cbrttab32069<> + 40(SB)/8, $0xa09090908080808
26DATA ·cbrttab32069<> + 48(SB)/8, $0x11111010100f0f0f
27DATA ·cbrttab32069<> + 56(SB)/8, $0xe0e0e0e0e0d0d0d
28DATA ·cbrttab32069<> + 64(SB)/8, $0x1515141413131312
29DATA ·cbrttab32069<> + 72(SB)/8, $0x1212111111111010
30GLOBL ·cbrttab32069<> + 0(SB), RODATA, $80
31
32DATA ·cbrttab22068<> + 0(SB)/8, $0x151015001420141
33DATA ·cbrttab22068<> + 8(SB)/8, $0x140013201310130
34DATA ·cbrttab22068<> + 16(SB)/8, $0x122012101200112
35DATA ·cbrttab22068<> + 24(SB)/8, $0x111011001020101
36DATA ·cbrttab22068<> + 32(SB)/8, $0x10000f200f100f0
37DATA ·cbrttab22068<> + 40(SB)/8, $0xe200e100e000d2
38DATA ·cbrttab22068<> + 48(SB)/8, $0xd100d000c200c1
39DATA ·cbrttab22068<> + 56(SB)/8, $0xc000b200b100b0
40DATA ·cbrttab22068<> + 64(SB)/8, $0xa200a100a00092
41DATA ·cbrttab22068<> + 72(SB)/8, $0x91009000820081
42DATA ·cbrttab22068<> + 80(SB)/8, $0x80007200710070
43DATA ·cbrttab22068<> + 88(SB)/8, $0x62006100600052
44DATA ·cbrttab22068<> + 96(SB)/8, $0x51005000420041
45DATA ·cbrttab22068<> + 104(SB)/8, $0x40003200310030
46DATA ·cbrttab22068<> + 112(SB)/8, $0x22002100200012
47DATA ·cbrttab22068<> + 120(SB)/8, $0x11001000020001
48GLOBL ·cbrttab22068<> + 0(SB), RODATA, $128
49
50DATA ·cbrttab12067<> + 0(SB)/8, $0x53e1529051324fe1
51DATA ·cbrttab12067<> + 8(SB)/8, $0x4e904d324be14a90
52DATA ·cbrttab12067<> + 16(SB)/8, $0x493247e146904532
53DATA ·cbrttab12067<> + 24(SB)/8, $0x43e1429041323fe1
54DATA ·cbrttab12067<> + 32(SB)/8, $0x3e903d323be13a90
55DATA ·cbrttab12067<> + 40(SB)/8, $0x393237e136903532
56DATA ·cbrttab12067<> + 48(SB)/8, $0x33e1329031322fe1
57DATA ·cbrttab12067<> + 56(SB)/8, $0x2e902d322be12a90
58DATA ·cbrttab12067<> + 64(SB)/8, $0xd3e1d290d132cfe1
59DATA ·cbrttab12067<> + 72(SB)/8, $0xce90cd32cbe1ca90
60DATA ·cbrttab12067<> + 80(SB)/8, $0xc932c7e1c690c532
61DATA ·cbrttab12067<> + 88(SB)/8, $0xc3e1c290c132bfe1
62DATA ·cbrttab12067<> + 96(SB)/8, $0xbe90bd32bbe1ba90
63DATA ·cbrttab12067<> + 104(SB)/8, $0xb932b7e1b690b532
64DATA ·cbrttab12067<> + 112(SB)/8, $0xb3e1b290b132afe1
65DATA ·cbrttab12067<> + 120(SB)/8, $0xae90ad32abe1aa90
66GLOBL ·cbrttab12067<> + 0(SB), RODATA, $128
67
68// Cbrt returns the cube root of the argument.
69//
70// Special cases are:
71// Cbrt(±0) = ±0
72// Cbrt(±Inf) = ±Inf
73// Cbrt(NaN) = NaN
74// The algorithm used is minimax polynomial approximation
75// with coefficients determined with a Remez exchange algorithm.
76
77TEXT ·cbrtAsm(SB), NOSPLIT, $0-16
78 FMOVD x+0(FP), F0
79 MOVD $·cbrtrodataL9<>+0(SB), R9
80 LGDR F0, R2
81 WORD $0xC039000F //iilf %r3,1048575
82 BYTE $0xFF
83 BYTE $0xFF
84 SRAD $32, R2
85 WORD $0xB9170012 //llgtr %r1,%r2
86 MOVW R1, R6
87 MOVW R3, R7
88 CMPBLE R6, R7, L2
89 WORD $0xC0397FEF //iilf %r3,2146435071
90 BYTE $0xFF
91 BYTE $0xFF
92 MOVW R3, R7
93 CMPBLE R6, R7, L8
94L1:
95 FMOVD F0, ret+8(FP)
96 RET
97L3:
98L2:
99 LTDBR F0, F0
100 BEQ L1
101 FMOVD F0, F2
102 WORD $0xED209040 //mdb %f2,.L10-.L9(%r9)
103 BYTE $0x00
104 BYTE $0x1C
105 MOVH $0x200, R4
106 LGDR F2, R2
107 SRAD $32, R2
108L4:
109 RISBGZ $57, $62, $39, R2, R3
110 MOVD $·cbrttab12067<>+0(SB), R1
111 WORD $0x48131000 //lh %r1,0(%r3,%r1)
112 RISBGZ $57, $62, $45, R2, R3
113 MOVD $·cbrttab22068<>+0(SB), R5
114 RISBGNZ $60, $63, $48, R2, R2
115 WORD $0x4A135000 //ah %r1,0(%r3,%r5)
116 BYTE $0x18 //lr %r3,%r1
117 BYTE $0x31
118 MOVD $·cbrttab32069<>+0(SB), R1
119 FMOVD 56(R9), F1
120 FMOVD 48(R9), F5
121 WORD $0xEC23393B //rosbg %r2,%r3,57,59,4
122 BYTE $0x04
123 BYTE $0x56
124 WORD $0xE3121000 //llc %r1,0(%r2,%r1)
125 BYTE $0x00
126 BYTE $0x94
127 ADDW R3, R1
128 ADDW R4, R1
129 SLW $16, R1, R1
130 SLD $32, R1, R1
131 LDGR R1, F2
132 WFMDB V2, V2, V4
133 WFMDB V4, V0, V6
134 WFMSDB V4, V6, V2, V4
135 FMOVD 40(R9), F6
136 FMSUB F1, F4, F2
137 FMOVD 32(R9), F4
138 WFMDB V2, V2, V3
139 FMOVD 24(R9), F1
140 FMUL F3, F0
141 FMOVD 16(R9), F3
142 WFMADB V2, V0, V5, V2
143 FMOVD 8(R9), F5
144 FMADD F6, F2, F4
145 WFMADB V2, V1, V3, V1
146 WFMDB V2, V2, V6
147 FMOVD 0(R9), F3
148 WFMADB V4, V6, V1, V4
149 WFMADB V2, V5, V3, V2
150 FMADD F4, F6, F2
151 FMADD F2, F0, F0
152 FMOVD F0, ret+8(FP)
153 RET
154L8:
155 MOVH $0x0, R4
156 BR L4
View as plain text