github.com/s1s1ty/go@v0.0.0-20180207192209-104445e3140f/src/math/asinh_s390x.s (about)

     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  	WORD	$0xB3CD00C0	//lgdr %r12, %f0
    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  	WORD	$0xB3120000	//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  	WORD	$0xB3CD0050	//lgdr %r5, %f0
    97  	SRAD	$32, R5
    98  	MOVH	$0x0, R2
    99  	SUBW	R5, R3
   100  	FMOVD	$0, F8
   101  	WORD	$0xEC4320AF	//risbg	%r4,%r3,32,128+47,0
   102  	BYTE	$0x00
   103  	BYTE	$0x55
   104  	BYTE	$0x18	//lr	%r1,%r4
   105  	BYTE	$0x14
   106  	WORD	$0xEC24001F	//risbgn	%r2,%r4,64-64+0,64-64+0+32-1,64-0-32
   107  	BYTE	$0x20
   108  	BYTE	$0x59
   109  	SUBW	$0x100000, R1
   110  	SRAW	$8, R1, R1
   111  	ORW	$0x45000000, R1
   112  	BR	L6
   113  L2:
   114  	MOVD	$0x30000000, R2
   115  	CMPW	R1, R2
   116  	BGT	L16
   117  	FMOVD	200(R9), F2
   118  	FMADD	F2, F0, F0
   119  L1:
   120  	FMOVD	F0, ret+8(FP)
   121  	RET
   122  L14:
   123  	WORD	$0xB3120000	//ltdbr	%f0,%f0
   124  	BLTU	L17
   125  	FMOVD	F0, F10
   126  L4:
   127  	FMOVD	192(R9), F2
   128  	WFMADB	V0, V0, V2, V0
   129  	WORD	$0xB3120000	//ltdbr	%f0,%f0
   130  	FSQRT	F0, F8
   131  L5:
   132  	WFADB	V8, V10, V0
   133  	WORD	$0xC0398006	//iilf	%r3,2147909631
   134  	BYTE	$0x7F
   135  	BYTE	$0xFF
   136  	WORD	$0xB3CD0050	//lgdr %r5, %f0
   137  	SRAD	$32, R5
   138  	MOVH	$0x0, R2
   139  	SUBW	R5, R3
   140  	WORD	$0xEC4320AF	//risbg	%r4,%r3,32,128+47,0
   141  	BYTE	$0x00
   142  	BYTE	$0x55
   143  	SRAW	$8, R4, R1
   144  	WORD	$0xEC24001F	//risbgn	%r2,%r4,64-64+0,64-64+0+32-1,64-0-32
   145  	BYTE	$0x20
   146  	BYTE	$0x59
   147  	ORW	$0x45000000, R1
   148  L6:
   149  	WORD	$0xB3C10022	//ldgr	%f2,%r2
   150  	FMOVD	184(R9), F0
   151  	WFMADB	V8, V2, V0, V8
   152  	FMOVD	176(R9), F4
   153  	WFMADB	V10, V2, V8, V2
   154  	FMOVD	168(R9), F0
   155  	FMOVD	160(R9), F6
   156  	FMOVD	152(R9), F1
   157  	WFMADB	V2, V6, V4, V6
   158  	WFMADB	V2, V1, V0, V1
   159  	WFMDB	V2, V2, V4
   160  	FMOVD	144(R9), F0
   161  	WFMADB	V6, V4, V1, V6
   162  	FMOVD	136(R9), F1
   163  	WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,64-13
   164  	BYTE	$0x33
   165  	BYTE	$0x55
   166  	WFMADB	V2, V0, V1, V0
   167  	FMOVD	128(R9), F1
   168  	WFMADB	V4, V6, V0, V6
   169  	FMOVD	120(R9), F0
   170  	WFMADB	V2, V1, V0, V1
   171  	VLVGF	$0, R1, V0
   172  	WFMADB	V4, V6, V1, V4
   173  	LDEBR	F0, F0
   174  	FMOVD	112(R9), F6
   175  	WFMADB	V2, V4, V6, V4
   176  	MOVD	$·asinhtab2080<>+0(SB), R1
   177  	FMOVD	104(R9), F1
   178  	WORD	$0x68331000	//ld	%f3,0(%r3,%r1)
   179  	FMOVD	96(R9), F6
   180  	WFMADB	V2, V4, V3, V2
   181  	WFMADB	V0, V1, V6, V0
   182  	FMOVD	88(R9), F4
   183  	WFMADB	V0, V4, V2, V0
   184  	MOVD	R12, R6
   185  	CMPBGT	R6, $0, L1
   186  
   187  	WORD	$0xB3130000	//lcdbr	%f0,%f0
   188  	FMOVD	F0, ret+8(FP)
   189  	RET
   190  L16:
   191  	WFMDB	V0, V0, V1
   192  	FMOVD	80(R9), F6
   193  	WFMDB	V1, V1, V4
   194  	FMOVD	72(R9), F2
   195  	WFMADB	V4, V2, V6, V2
   196  	FMOVD	64(R9), F3
   197  	FMOVD	56(R9), F6
   198  	WFMADB	V4, V2, V3, V2
   199  	FMOVD	48(R9), F3
   200  	WFMADB	V4, V6, V3, V6
   201  	FMOVD	40(R9), F5
   202  	FMOVD	32(R9), F3
   203  	WFMADB	V4, V2, V5, V2
   204  	WFMADB	V4, V6, V3, V6
   205  	FMOVD	24(R9), F5
   206  	FMOVD	16(R9), F3
   207  	WFMADB	V4, V2, V5, V2
   208  	WFMADB	V4, V6, V3, V6
   209  	FMOVD	8(R9), F5
   210  	FMOVD	0(R9), F3
   211  	WFMADB	V4, V2, V5, V2
   212  	WFMADB	V4, V6, V3, V4
   213  	WFMDB	V0, V1, V6
   214  	WFMADB	V1, V4, V2, V4
   215  	FMADD	F4, F6, F0
   216  	FMOVD	F0, ret+8(FP)
   217  	RET
   218  L17:
   219  	WORD	$0xB31300A0	//lcdbr	%f10,%f0
   220  	BR	L4
   221  L15:
   222  	WORD	$0xB31300A0	//lcdbr	%f10,%f0
   223  	BR	L9