...

Text file src/pkg/math/asinh_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 ·asinhrodataL18<> + 0(SB)/8, $0.749999999977387502E-01
     9	DATA ·asinhrodataL18<> + 8(SB)/8, $-.166666666666657082E+00
    10	DATA ·asinhrodataL18<> + 16(SB)/8, $0.303819368237360639E-01
    11	DATA ·asinhrodataL18<> + 24(SB)/8, $-.446428569571752982E-01
    12	DATA ·asinhrodataL18<> + 32(SB)/8, $0.173500047922695924E-01
    13	DATA ·asinhrodataL18<> + 40(SB)/8, $-.223719767210027185E-01
    14	DATA ·asinhrodataL18<> + 48(SB)/8, $0.113655037946822130E-01
    15	DATA ·asinhrodataL18<> + 56(SB)/8, $0.579747490622448943E-02
    16	DATA ·asinhrodataL18<> + 64(SB)/8, $-.139372433914359122E-01
    17	DATA ·asinhrodataL18<> + 72(SB)/8, $-.218674325255800840E-02
    18	DATA ·asinhrodataL18<> + 80(SB)/8, $-.891074277756961157E-02
    19	DATA ·asinhrodataL18<> + 88(SB)/8, $.41375273347623353626
    20	DATA ·asinhrodataL18<> + 96(SB)/8, $.51487302528619766235E+04
    21	DATA ·asinhrodataL18<> + 104(SB)/8, $-1.67526912689208984375
    22	DATA ·asinhrodataL18<> + 112(SB)/8, $0.181818181818181826E+00
    23	DATA ·asinhrodataL18<> + 120(SB)/8, $-.165289256198351540E-01
    24	DATA ·asinhrodataL18<> + 128(SB)/8, $0.200350613573012186E-02
    25	DATA ·asinhrodataL18<> + 136(SB)/8, $-.273205381970859341E-03
    26	DATA ·asinhrodataL18<> + 144(SB)/8, $0.397389654305194527E-04
    27	DATA ·asinhrodataL18<> + 152(SB)/8, $0.938370938292558173E-06
    28	DATA ·asinhrodataL18<> + 160(SB)/8, $0.212881813645679599E-07
    29	DATA ·asinhrodataL18<> + 168(SB)/8, $-.602107458843052029E-05
    30	DATA ·asinhrodataL18<> + 176(SB)/8, $-.148682720127920854E-06
    31	DATA ·asinhrodataL18<> + 184(SB)/8, $-5.5
    32	DATA ·asinhrodataL18<> + 192(SB)/8, $1.0
    33	DATA ·asinhrodataL18<> + 200(SB)/8, $1.0E-20
    34	GLOBL ·asinhrodataL18<> + 0(SB), RODATA, $208
    35	
    36	// Table of log correction terms
    37	DATA ·asinhtab2080<> + 0(SB)/8, $0.585235384085551248E-01
    38	DATA ·asinhtab2080<> + 8(SB)/8, $0.412206153771168640E-01
    39	DATA ·asinhtab2080<> + 16(SB)/8, $0.273839003221648339E-01
    40	DATA ·asinhtab2080<> + 24(SB)/8, $0.166383778368856480E-01
    41	DATA ·asinhtab2080<> + 32(SB)/8, $0.866678223433169637E-02
    42	DATA ·asinhtab2080<> + 40(SB)/8, $0.319831684989627514E-02
    43	DATA ·asinhtab2080<> + 48(SB)/8, $0.0
    44	DATA ·asinhtab2080<> + 56(SB)/8, $-.113006378583725549E-02
    45	DATA ·asinhtab2080<> + 64(SB)/8, $-.367979419636602491E-03
    46	DATA ·asinhtab2080<> + 72(SB)/8, $0.213172484510484979E-02
    47	DATA ·asinhtab2080<> + 80(SB)/8, $0.623271047682013536E-02
    48	DATA ·asinhtab2080<> + 88(SB)/8, $0.118140812789696885E-01
    49	DATA ·asinhtab2080<> + 96(SB)/8, $0.187681358930914206E-01
    50	DATA ·asinhtab2080<> + 104(SB)/8, $0.269985148668178992E-01
    51	DATA ·asinhtab2080<> + 112(SB)/8, $0.364186619761331328E-01
    52	DATA ·asinhtab2080<> + 120(SB)/8, $0.469505379381388441E-01
    53	GLOBL ·asinhtab2080<> + 0(SB), RODATA, $128
    54	
    55	// Asinh returns the inverse hyperbolic sine of the argument.
    56	//
    57	// Special cases are:
    58	//      Asinh(±0) = ±0
    59	//      Asinh(±Inf) = ±Inf
    60	//      Asinh(NaN) = NaN
    61	// The algorithm used is minimax polynomial approximation
    62	// with coefficients determined with a Remez exchange algorithm.
    63	
    64	TEXT	·asinhAsm(SB), NOSPLIT, $0-16
    65		FMOVD	x+0(FP), F0
    66		MOVD	$·asinhrodataL18<>+0(SB), R9
    67		LGDR	F0, R12
    68		WORD	$0xC0293FDF	//iilf	%r2,1071644671
    69		BYTE	$0xFF
    70		BYTE	$0xFF
    71		SRAD	$32, R12
    72		WORD	$0xB917001C	//llgtr	%r1,%r12
    73		MOVW	R1, R6
    74		MOVW	R2, R7
    75		CMPBLE	R6, R7, L2
    76		WORD	$0xC0295FEF	//iilf	%r2,1609564159
    77		BYTE	$0xFF
    78		BYTE	$0xFF
    79		MOVW	R2, R7
    80		CMPBLE	R6, R7, L14
    81	L3:
    82		WORD	$0xC0297FEF	//iilf	%r2,2146435071
    83		BYTE	$0xFF
    84		BYTE	$0xFF
    85		CMPW	R1, R2
    86		BGT	L1
    87		LTDBR	F0, F0
    88		FMOVD	F0, F10
    89		BLTU	L15
    90	L9:
    91		FMOVD	$0, F0
    92		WFADB	V0, V10, V0
    93		WORD	$0xC0398006	//iilf	%r3,2147909631
    94		BYTE	$0x7F
    95		BYTE	$0xFF
    96		LGDR	F0, R5
    97		SRAD	$32, R5
    98		MOVH	$0x0, R2
    99		SUBW	R5, R3
   100		FMOVD	$0, F8
   101		RISBGZ	$32, $47, $0, R3, R4
   102		BYTE	$0x18	//lr	%r1,%r4
   103		BYTE	$0x14
   104		RISBGN	$0, $31, $32, R4, R2
   105		SUBW	$0x100000, R1
   106		SRAW	$8, R1, R1
   107		ORW	$0x45000000, R1
   108		BR	L6
   109	L2:
   110		MOVD	$0x30000000, R2
   111		CMPW	R1, R2
   112		BGT	L16
   113		FMOVD	200(R9), F2
   114		FMADD	F2, F0, F0
   115	L1:
   116		FMOVD	F0, ret+8(FP)
   117		RET
   118	L14:
   119		LTDBR	F0, F0
   120		BLTU	L17
   121		FMOVD	F0, F10
   122	L4:
   123		FMOVD	192(R9), F2
   124		WFMADB	V0, V0, V2, V0
   125		LTDBR	F0, F0
   126		FSQRT	F0, F8
   127	L5:
   128		WFADB	V8, V10, V0
   129		WORD	$0xC0398006	//iilf	%r3,2147909631
   130		BYTE	$0x7F
   131		BYTE	$0xFF
   132		LGDR	F0, R5
   133		SRAD	$32, R5
   134		MOVH	$0x0, R2
   135		SUBW	R5, R3
   136		RISBGZ	$32, $47, $0, R3, R4
   137		SRAW	$8, R4, R1
   138		RISBGN	$0, $31, $32, R4, R2
   139		ORW	$0x45000000, R1
   140	L6:
   141		LDGR	R2, F2
   142		FMOVD	184(R9), F0
   143		WFMADB	V8, V2, V0, V8
   144		FMOVD	176(R9), F4
   145		WFMADB	V10, V2, V8, V2
   146		FMOVD	168(R9), F0
   147		FMOVD	160(R9), F6
   148		FMOVD	152(R9), F1
   149		WFMADB	V2, V6, V4, V6
   150		WFMADB	V2, V1, V0, V1
   151		WFMDB	V2, V2, V4
   152		FMOVD	144(R9), F0
   153		WFMADB	V6, V4, V1, V6
   154		FMOVD	136(R9), F1
   155		RISBGZ	$57, $60, $51, R3, R3
   156		WFMADB	V2, V0, V1, V0
   157		FMOVD	128(R9), F1
   158		WFMADB	V4, V6, V0, V6
   159		FMOVD	120(R9), F0
   160		WFMADB	V2, V1, V0, V1
   161		VLVGF	$0, R1, V0
   162		WFMADB	V4, V6, V1, V4
   163		LDEBR	F0, F0
   164		FMOVD	112(R9), F6
   165		WFMADB	V2, V4, V6, V4
   166		MOVD	$·asinhtab2080<>+0(SB), R1
   167		FMOVD	104(R9), F1
   168		WORD	$0x68331000	//ld	%f3,0(%r3,%r1)
   169		FMOVD	96(R9), F6
   170		WFMADB	V2, V4, V3, V2
   171		WFMADB	V0, V1, V6, V0
   172		FMOVD	88(R9), F4
   173		WFMADB	V0, V4, V2, V0
   174		MOVD	R12, R6
   175		CMPBGT	R6, $0, L1
   176	
   177		WORD	$0xB3130000	//lcdbr	%f0,%f0
   178		FMOVD	F0, ret+8(FP)
   179		RET
   180	L16:
   181		WFMDB	V0, V0, V1
   182		FMOVD	80(R9), F6
   183		WFMDB	V1, V1, V4
   184		FMOVD	72(R9), F2
   185		WFMADB	V4, V2, V6, V2
   186		FMOVD	64(R9), F3
   187		FMOVD	56(R9), F6
   188		WFMADB	V4, V2, V3, V2
   189		FMOVD	48(R9), F3
   190		WFMADB	V4, V6, V3, V6
   191		FMOVD	40(R9), F5
   192		FMOVD	32(R9), F3
   193		WFMADB	V4, V2, V5, V2
   194		WFMADB	V4, V6, V3, V6
   195		FMOVD	24(R9), F5
   196		FMOVD	16(R9), F3
   197		WFMADB	V4, V2, V5, V2
   198		WFMADB	V4, V6, V3, V6
   199		FMOVD	8(R9), F5
   200		FMOVD	0(R9), F3
   201		WFMADB	V4, V2, V5, V2
   202		WFMADB	V4, V6, V3, V4
   203		WFMDB	V0, V1, V6
   204		WFMADB	V1, V4, V2, V4
   205		FMADD	F4, F6, F0
   206		FMOVD	F0, ret+8(FP)
   207		RET
   208	L17:
   209		WORD	$0xB31300A0	//lcdbr	%f10,%f0
   210		BR	L4
   211	L15:
   212		WORD	$0xB31300A0	//lcdbr	%f10,%f0
   213		BR	L9

View as plain text