Text file src/pkg/math/stubs_s390x.s
1 // Copyright 2016 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 TEXT ·Exp2(SB), NOSPLIT, $0
8 BR ·exp2(SB)
9
10 TEXT ·Frexp(SB), NOSPLIT, $0
11 BR ·frexp(SB)
12
13 TEXT ·Hypot(SB), NOSPLIT, $0
14 BR ·hypot(SB)
15
16 TEXT ·Ldexp(SB), NOSPLIT, $0
17 BR ·ldexp(SB)
18
19 TEXT ·Log2(SB), NOSPLIT, $0
20 BR ·log2(SB)
21
22 TEXT ·Modf(SB), NOSPLIT, $0
23 BR ·modf(SB)
24
25 TEXT ·Mod(SB), NOSPLIT, $0
26 BR ·mod(SB)
27
28 TEXT ·Remainder(SB), NOSPLIT, $0
29 BR ·remainder(SB)
30
31 // if go assembly use vector instruction
32 TEXT ·hasVectorFacility(SB), NOSPLIT, $24-1
33 MOVD $x-24(SP), R1
34 XC $24, 0(R1), 0(R1) // clear the storage
35 MOVD $2, R0 // R0 is the number of double words stored -1
36 WORD $0xB2B01000 // STFLE 0(R1)
37 XOR R0, R0 // reset the value of R0
38 MOVBZ z-8(SP), R1
39 AND $0x40, R1
40 BEQ novector
41
42 vectorinstalled:
43 // check if the vector instruction has been enabled
44 VLEIB $0, $0xF, V16
45 VLGVB $0, V16, R1
46 CMPBNE R1, $0xF, novector
47 MOVB $1, ret+0(FP) // have vx
48 RET
49
50 novector:
51 MOVB $0, ret+0(FP) // no vx
52 RET
53
54 TEXT ·Log10(SB), NOSPLIT, $0
55 MOVD ·log10vectorfacility+0x00(SB), R1
56 BR (R1)
57
58 TEXT ·log10TrampolineSetup(SB), NOSPLIT, $0
59 MOVB ·hasVX(SB), R1
60 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
61 MOVD $·log10vectorfacility+0x00(SB), R1
62 MOVD $·log10(SB), R2
63 MOVD R2, 0(R1)
64 BR ·log10(SB)
65
66 vectorimpl:
67 MOVD $·log10vectorfacility+0x00(SB), R1
68 MOVD $·log10Asm(SB), R2
69 MOVD R2, 0(R1)
70 BR ·log10Asm(SB)
71
72 GLOBL ·log10vectorfacility+0x00(SB), NOPTR, $8
73 DATA ·log10vectorfacility+0x00(SB)/8, $·log10TrampolineSetup(SB)
74
75 TEXT ·Cos(SB), NOSPLIT, $0
76 MOVD ·cosvectorfacility+0x00(SB), R1
77 BR (R1)
78
79 TEXT ·cosTrampolineSetup(SB), NOSPLIT, $0
80 MOVB ·hasVX(SB), R1
81 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
82 MOVD $·cosvectorfacility+0x00(SB), R1
83 MOVD $·cos(SB), R2
84 MOVD R2, 0(R1)
85 BR ·cos(SB)
86
87 vectorimpl:
88 MOVD $·cosvectorfacility+0x00(SB), R1
89 MOVD $·cosAsm(SB), R2
90 MOVD R2, 0(R1)
91 BR ·cosAsm(SB)
92
93 GLOBL ·cosvectorfacility+0x00(SB), NOPTR, $8
94 DATA ·cosvectorfacility+0x00(SB)/8, $·cosTrampolineSetup(SB)
95
96 TEXT ·Cosh(SB), NOSPLIT, $0
97 MOVD ·coshvectorfacility+0x00(SB), R1
98 BR (R1)
99
100 TEXT ·coshTrampolineSetup(SB), NOSPLIT, $0
101 MOVB ·hasVX(SB), R1
102 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
103 MOVD $·coshvectorfacility+0x00(SB), R1
104 MOVD $·cosh(SB), R2
105 MOVD R2, 0(R1)
106 BR ·cosh(SB)
107
108 vectorimpl:
109 MOVD $·coshvectorfacility+0x00(SB), R1
110 MOVD $·coshAsm(SB), R2
111 MOVD R2, 0(R1)
112 BR ·coshAsm(SB)
113
114 GLOBL ·coshvectorfacility+0x00(SB), NOPTR, $8
115 DATA ·coshvectorfacility+0x00(SB)/8, $·coshTrampolineSetup(SB)
116
117 TEXT ·Sin(SB), NOSPLIT, $0
118 MOVD ·sinvectorfacility+0x00(SB), R1
119 BR (R1)
120
121 TEXT ·sinTrampolineSetup(SB), NOSPLIT, $0
122 MOVB ·hasVX(SB), R1
123 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
124 MOVD $·sinvectorfacility+0x00(SB), R1
125 MOVD $·sin(SB), R2
126 MOVD R2, 0(R1)
127 BR ·sin(SB)
128
129 vectorimpl:
130 MOVD $·sinvectorfacility+0x00(SB), R1
131 MOVD $·sinAsm(SB), R2
132 MOVD R2, 0(R1)
133 BR ·sinAsm(SB)
134
135 GLOBL ·sinvectorfacility+0x00(SB), NOPTR, $8
136 DATA ·sinvectorfacility+0x00(SB)/8, $·sinTrampolineSetup(SB)
137
138 TEXT ·Sinh(SB), NOSPLIT, $0
139 MOVD ·sinhvectorfacility+0x00(SB), R1
140 BR (R1)
141
142 TEXT ·sinhTrampolineSetup(SB), NOSPLIT, $0
143 MOVB ·hasVX(SB), R1
144 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
145 MOVD $·sinhvectorfacility+0x00(SB), R1
146 MOVD $·sinh(SB), R2
147 MOVD R2, 0(R1)
148 BR ·sinh(SB)
149
150 vectorimpl:
151 MOVD $·sinhvectorfacility+0x00(SB), R1
152 MOVD $·sinhAsm(SB), R2
153 MOVD R2, 0(R1)
154 BR ·sinhAsm(SB)
155
156 GLOBL ·sinhvectorfacility+0x00(SB), NOPTR, $8
157 DATA ·sinhvectorfacility+0x00(SB)/8, $·sinhTrampolineSetup(SB)
158
159 TEXT ·Tanh(SB), NOSPLIT, $0
160 MOVD ·tanhvectorfacility+0x00(SB), R1
161 BR (R1)
162
163 TEXT ·tanhTrampolineSetup(SB), NOSPLIT, $0
164 MOVB ·hasVX(SB), R1
165 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
166 MOVD $·tanhvectorfacility+0x00(SB), R1
167 MOVD $·tanh(SB), R2
168 MOVD R2, 0(R1)
169 BR ·tanh(SB)
170
171 vectorimpl:
172 MOVD $·tanhvectorfacility+0x00(SB), R1
173 MOVD $·tanhAsm(SB), R2
174 MOVD R2, 0(R1)
175 BR ·tanhAsm(SB)
176
177 GLOBL ·tanhvectorfacility+0x00(SB), NOPTR, $8
178 DATA ·tanhvectorfacility+0x00(SB)/8, $·tanhTrampolineSetup(SB)
179
180 TEXT ·Log1p(SB), NOSPLIT, $0
181 MOVD ·log1pvectorfacility+0x00(SB), R1
182 BR (R1)
183
184 TEXT ·log1pTrampolineSetup(SB), NOSPLIT, $0
185 MOVB ·hasVX(SB), R1
186 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
187 MOVD $·log1pvectorfacility+0x00(SB), R1
188 MOVD $·log1p(SB), R2
189 MOVD R2, 0(R1)
190 BR ·log1p(SB)
191
192 vectorimpl:
193 MOVD $·log1pvectorfacility+0x00(SB), R1
194 MOVD $·log1pAsm(SB), R2
195 MOVD R2, 0(R1)
196 BR ·log1pAsm(SB)
197
198 GLOBL ·log1pvectorfacility+0x00(SB), NOPTR, $8
199 DATA ·log1pvectorfacility+0x00(SB)/8, $·log1pTrampolineSetup(SB)
200
201 TEXT ·Atanh(SB), NOSPLIT, $0
202 MOVD ·atanhvectorfacility+0x00(SB), R1
203 BR (R1)
204
205 TEXT ·atanhTrampolineSetup(SB), NOSPLIT, $0
206 MOVB ·hasVX(SB), R1
207 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
208 MOVD $·atanhvectorfacility+0x00(SB), R1
209 MOVD $·atanh(SB), R2
210 MOVD R2, 0(R1)
211 BR ·atanh(SB)
212
213 vectorimpl:
214 MOVD $·atanhvectorfacility+0x00(SB), R1
215 MOVD $·atanhAsm(SB), R2
216 MOVD R2, 0(R1)
217 BR ·atanhAsm(SB)
218
219 GLOBL ·atanhvectorfacility+0x00(SB), NOPTR, $8
220 DATA ·atanhvectorfacility+0x00(SB)/8, $·atanhTrampolineSetup(SB)
221
222 TEXT ·Acos(SB), NOSPLIT, $0
223 MOVD ·acosvectorfacility+0x00(SB), R1
224 BR (R1)
225
226 TEXT ·acosTrampolineSetup(SB), NOSPLIT, $0
227 MOVB ·hasVX(SB), R1
228 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
229 MOVD $·acosvectorfacility+0x00(SB), R1
230 MOVD $·acos(SB), R2
231 MOVD R2, 0(R1)
232 BR ·acos(SB)
233
234 vectorimpl:
235 MOVD $·acosvectorfacility+0x00(SB), R1
236 MOVD $·acosAsm(SB), R2
237 MOVD R2, 0(R1)
238 BR ·acosAsm(SB)
239
240 GLOBL ·acosvectorfacility+0x00(SB), NOPTR, $8
241 DATA ·acosvectorfacility+0x00(SB)/8, $·acosTrampolineSetup(SB)
242
243 TEXT ·Asin(SB), NOSPLIT, $0
244 MOVD ·asinvectorfacility+0x00(SB), R1
245 BR (R1)
246
247 TEXT ·asinTrampolineSetup(SB), NOSPLIT, $0
248 MOVB ·hasVX(SB), R1
249 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
250 MOVD $·asinvectorfacility+0x00(SB), R1
251 MOVD $·asin(SB), R2
252 MOVD R2, 0(R1)
253 BR ·asin(SB)
254
255 vectorimpl:
256 MOVD $·asinvectorfacility+0x00(SB), R1
257 MOVD $·asinAsm(SB), R2
258 MOVD R2, 0(R1)
259 BR ·asinAsm(SB)
260
261 GLOBL ·asinvectorfacility+0x00(SB), NOPTR, $8
262 DATA ·asinvectorfacility+0x00(SB)/8, $·asinTrampolineSetup(SB)
263
264 TEXT ·Asinh(SB), NOSPLIT, $0
265 MOVD ·asinhvectorfacility+0x00(SB), R1
266 BR (R1)
267
268 TEXT ·asinhTrampolineSetup(SB), NOSPLIT, $0
269 MOVB ·hasVX(SB), R1
270 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
271 MOVD $·asinhvectorfacility+0x00(SB), R1
272 MOVD $·asinh(SB), R2
273 MOVD R2, 0(R1)
274 BR ·asinh(SB)
275
276 vectorimpl:
277 MOVD $·asinhvectorfacility+0x00(SB), R1
278 MOVD $·asinhAsm(SB), R2
279 MOVD R2, 0(R1)
280 BR ·asinhAsm(SB)
281
282 GLOBL ·asinhvectorfacility+0x00(SB), NOPTR, $8
283 DATA ·asinhvectorfacility+0x00(SB)/8, $·asinhTrampolineSetup(SB)
284
285 TEXT ·Acosh(SB), NOSPLIT, $0
286 MOVD ·acoshvectorfacility+0x00(SB), R1
287 BR (R1)
288
289 TEXT ·acoshTrampolineSetup(SB), NOSPLIT, $0
290 MOVB ·hasVX(SB), R1
291 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
292 MOVD $·acoshvectorfacility+0x00(SB), R1
293 MOVD $·acosh(SB), R2
294 MOVD R2, 0(R1)
295 BR ·acosh(SB)
296
297 vectorimpl:
298 MOVD $·acoshvectorfacility+0x00(SB), R1
299 MOVD $·acoshAsm(SB), R2
300 MOVD R2, 0(R1)
301 BR ·acoshAsm(SB)
302
303 GLOBL ·acoshvectorfacility+0x00(SB), NOPTR, $8
304 DATA ·acoshvectorfacility+0x00(SB)/8, $·acoshTrampolineSetup(SB)
305
306 TEXT ·Erf(SB), NOSPLIT, $0
307 MOVD ·erfvectorfacility+0x00(SB), R1
308 BR (R1)
309
310 TEXT ·erfTrampolineSetup(SB), NOSPLIT, $0
311 MOVB ·hasVX(SB), R1
312 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
313 MOVD $·erfvectorfacility+0x00(SB), R1
314 MOVD $·erf(SB), R2
315 MOVD R2, 0(R1)
316 BR ·erf(SB)
317
318 vectorimpl:
319 MOVD $·erfvectorfacility+0x00(SB), R1
320 MOVD $·erfAsm(SB), R2
321 MOVD R2, 0(R1)
322 BR ·erfAsm(SB)
323
324 GLOBL ·erfvectorfacility+0x00(SB), NOPTR, $8
325 DATA ·erfvectorfacility+0x00(SB)/8, $·erfTrampolineSetup(SB)
326
327 TEXT ·Erfc(SB), NOSPLIT, $0
328 MOVD ·erfcvectorfacility+0x00(SB), R1
329 BR (R1)
330
331 TEXT ·erfcTrampolineSetup(SB), NOSPLIT, $0
332 MOVB ·hasVX(SB), R1
333 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
334 MOVD $·erfcvectorfacility+0x00(SB), R1
335 MOVD $·erfc(SB), R2
336 MOVD R2, 0(R1)
337 BR ·erfc(SB)
338
339 vectorimpl:
340 MOVD $·erfcvectorfacility+0x00(SB), R1
341 MOVD $·erfcAsm(SB), R2
342 MOVD R2, 0(R1)
343 BR ·erfcAsm(SB)
344
345 GLOBL ·erfcvectorfacility+0x00(SB), NOPTR, $8
346 DATA ·erfcvectorfacility+0x00(SB)/8, $·erfcTrampolineSetup(SB)
347
348 TEXT ·Atan(SB), NOSPLIT, $0
349 MOVD ·atanvectorfacility+0x00(SB), R1
350 BR (R1)
351
352 TEXT ·atanTrampolineSetup(SB), NOSPLIT, $0
353 MOVB ·hasVX(SB), R1
354 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
355 MOVD $·atanvectorfacility+0x00(SB), R1
356 MOVD $·atan(SB), R2
357 MOVD R2, 0(R1)
358 BR ·atan(SB)
359
360 vectorimpl:
361 MOVD $·atanvectorfacility+0x00(SB), R1
362 MOVD $·atanAsm(SB), R2
363 MOVD R2, 0(R1)
364 BR ·atanAsm(SB)
365
366 GLOBL ·atanvectorfacility+0x00(SB), NOPTR, $8
367 DATA ·atanvectorfacility+0x00(SB)/8, $·atanTrampolineSetup(SB)
368
369 TEXT ·Atan2(SB), NOSPLIT, $0
370 MOVD ·atan2vectorfacility+0x00(SB), R1
371 BR (R1)
372
373 TEXT ·atan2TrampolineSetup(SB), NOSPLIT, $0
374 MOVB ·hasVX(SB), R1
375 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
376 MOVD $·atan2vectorfacility+0x00(SB), R1
377 MOVD $·atan2(SB), R2
378 MOVD R2, 0(R1)
379 BR ·atan2(SB)
380
381 vectorimpl:
382 MOVD $·atan2vectorfacility+0x00(SB), R1
383 MOVD $·atan2Asm(SB), R2
384 MOVD R2, 0(R1)
385 BR ·atan2Asm(SB)
386
387 GLOBL ·atan2vectorfacility+0x00(SB), NOPTR, $8
388 DATA ·atan2vectorfacility+0x00(SB)/8, $·atan2TrampolineSetup(SB)
389
390 TEXT ·Cbrt(SB), NOSPLIT, $0
391 MOVD ·cbrtvectorfacility+0x00(SB), R1
392 BR (R1)
393
394 TEXT ·cbrtTrampolineSetup(SB), NOSPLIT, $0
395 MOVB ·hasVX(SB), R1
396 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
397 MOVD $·cbrtvectorfacility+0x00(SB), R1
398 MOVD $·cbrt(SB), R2
399 MOVD R2, 0(R1)
400 BR ·cbrt(SB)
401
402 vectorimpl:
403 MOVD $·cbrtvectorfacility+0x00(SB), R1
404 MOVD $·cbrtAsm(SB), R2
405 MOVD R2, 0(R1)
406 BR ·cbrtAsm(SB)
407
408 GLOBL ·cbrtvectorfacility+0x00(SB), NOPTR, $8
409 DATA ·cbrtvectorfacility+0x00(SB)/8, $·cbrtTrampolineSetup(SB)
410
411 TEXT ·Log(SB), NOSPLIT, $0
412 MOVD ·logvectorfacility+0x00(SB), R1
413 BR (R1)
414
415 TEXT ·logTrampolineSetup(SB), NOSPLIT, $0
416 MOVB ·hasVX(SB), R1
417 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
418 MOVD $·logvectorfacility+0x00(SB), R1
419 MOVD $·log(SB), R2
420 MOVD R2, 0(R1)
421 BR ·log(SB)
422
423 vectorimpl:
424 MOVD $·logvectorfacility+0x00(SB), R1
425 MOVD $·logAsm(SB), R2
426 MOVD R2, 0(R1)
427 BR ·logAsm(SB)
428
429 GLOBL ·logvectorfacility+0x00(SB), NOPTR, $8
430 DATA ·logvectorfacility+0x00(SB)/8, $·logTrampolineSetup(SB)
431
432 TEXT ·Tan(SB), NOSPLIT, $0
433 MOVD ·tanvectorfacility+0x00(SB), R1
434 BR (R1)
435
436 TEXT ·tanTrampolineSetup(SB), NOSPLIT, $0
437 MOVB ·hasVX(SB), R1
438 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
439 MOVD $·tanvectorfacility+0x00(SB), R1
440 MOVD $·tan(SB), R2
441 MOVD R2, 0(R1)
442 BR ·tan(SB)
443
444 vectorimpl:
445 MOVD $·tanvectorfacility+0x00(SB), R1
446 MOVD $·tanAsm(SB), R2
447 MOVD R2, 0(R1)
448 BR ·tanAsm(SB)
449
450 GLOBL ·tanvectorfacility+0x00(SB), NOPTR, $8
451 DATA ·tanvectorfacility+0x00(SB)/8, $·tanTrampolineSetup(SB)
452
453 TEXT ·Exp(SB), NOSPLIT, $0
454 MOVD ·expvectorfacility+0x00(SB), R1
455 BR (R1)
456
457 TEXT ·expTrampolineSetup(SB), NOSPLIT, $0
458 MOVB ·hasVX(SB), R1
459 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
460 MOVD $·expvectorfacility+0x00(SB), R1
461 MOVD $·exp(SB), R2
462 MOVD R2, 0(R1)
463 BR ·exp(SB)
464
465 vectorimpl:
466 MOVD $·expvectorfacility+0x00(SB), R1
467 MOVD $·expAsm(SB), R2
468 MOVD R2, 0(R1)
469 BR ·expAsm(SB)
470
471 GLOBL ·expvectorfacility+0x00(SB), NOPTR, $8
472 DATA ·expvectorfacility+0x00(SB)/8, $·expTrampolineSetup(SB)
473
474 TEXT ·Expm1(SB), NOSPLIT, $0
475 MOVD ·expm1vectorfacility+0x00(SB), R1
476 BR (R1)
477
478 TEXT ·expm1TrampolineSetup(SB), NOSPLIT, $0
479 MOVB ·hasVX(SB), R1
480 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
481 MOVD $·expm1vectorfacility+0x00(SB), R1
482 MOVD $·expm1(SB), R2
483 MOVD R2, 0(R1)
484 BR ·expm1(SB)
485
486 vectorimpl:
487 MOVD $·expm1vectorfacility+0x00(SB), R1
488 MOVD $·expm1Asm(SB), R2
489 MOVD R2, 0(R1)
490 BR ·expm1Asm(SB)
491
492 GLOBL ·expm1vectorfacility+0x00(SB), NOPTR, $8
493 DATA ·expm1vectorfacility+0x00(SB)/8, $·expm1TrampolineSetup(SB)
494
495 TEXT ·Pow(SB), NOSPLIT, $0
496 MOVD ·powvectorfacility+0x00(SB), R1
497 BR (R1)
498
499 TEXT ·powTrampolineSetup(SB), NOSPLIT, $0
500 MOVB ·hasVX(SB), R1
501 CMPBEQ R1, $1, vectorimpl // vectorfacility = 1, vector supported
502 MOVD $·powvectorfacility+0x00(SB), R1
503 MOVD $·pow(SB), R2
504 MOVD R2, 0(R1)
505 BR ·pow(SB)
506
507 vectorimpl:
508 MOVD $·powvectorfacility+0x00(SB), R1
509 MOVD $·powAsm(SB), R2
510 MOVD R2, 0(R1)
511 BR ·powAsm(SB)
512
513 GLOBL ·powvectorfacility+0x00(SB), NOPTR, $8
514 DATA ·powvectorfacility+0x00(SB)/8, $·powTrampolineSetup(SB)
515
View as plain text