...

Text file src/pkg/math/atanh_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 ·atanhrodataL10<> + 0(SB)/8, $.41375273347623353626
     9	DATA ·atanhrodataL10<> + 8(SB)/8, $.51487302528619766235E+04
    10	DATA ·atanhrodataL10<> + 16(SB)/8, $-1.67526912689208984375
    11	DATA ·atanhrodataL10<> + 24(SB)/8, $0.181818181818181826E+00
    12	DATA ·atanhrodataL10<> + 32(SB)/8, $-.165289256198351540E-01
    13	DATA ·atanhrodataL10<> + 40(SB)/8, $0.200350613573012186E-02
    14	DATA ·atanhrodataL10<> + 48(SB)/8, $0.397389654305194527E-04
    15	DATA ·atanhrodataL10<> + 56(SB)/8, $-.273205381970859341E-03
    16	DATA ·atanhrodataL10<> + 64(SB)/8, $0.938370938292558173E-06
    17	DATA ·atanhrodataL10<> + 72(SB)/8, $-.148682720127920854E-06
    18	DATA ·atanhrodataL10<> + 80(SB)/8, $ 0.212881813645679599E-07
    19	DATA ·atanhrodataL10<> + 88(SB)/8, $-.602107458843052029E-05
    20	DATA ·atanhrodataL10<> + 96(SB)/8, $-5.5
    21	DATA ·atanhrodataL10<> + 104(SB)/8, $-0.5
    22	DATA ·atanhrodataL10<> + 112(SB)/8, $0.0
    23	DATA ·atanhrodataL10<> + 120(SB)/8, $0x7ff8000000000000      //Nan
    24	DATA ·atanhrodataL10<> + 128(SB)/8, $-1.0
    25	DATA ·atanhrodataL10<> + 136(SB)/8, $1.0
    26	DATA ·atanhrodataL10<> + 144(SB)/8, $1.0E-20
    27	GLOBL ·atanhrodataL10<> + 0(SB), RODATA, $152
    28	
    29	// Table of log correction terms
    30	DATA ·atanhtab2076<> + 0(SB)/8, $0.585235384085551248E-01
    31	DATA ·atanhtab2076<> + 8(SB)/8, $0.412206153771168640E-01
    32	DATA ·atanhtab2076<> + 16(SB)/8, $0.273839003221648339E-01
    33	DATA ·atanhtab2076<> + 24(SB)/8, $0.166383778368856480E-01
    34	DATA ·atanhtab2076<> + 32(SB)/8, $0.866678223433169637E-02
    35	DATA ·atanhtab2076<> + 40(SB)/8, $0.319831684989627514E-02
    36	DATA ·atanhtab2076<> + 48(SB)/8, $0.000000000000000000E+00
    37	DATA ·atanhtab2076<> + 56(SB)/8, $-.113006378583725549E-02
    38	DATA ·atanhtab2076<> + 64(SB)/8, $-.367979419636602491E-03
    39	DATA ·atanhtab2076<> + 72(SB)/8, $0.213172484510484979E-02
    40	DATA ·atanhtab2076<> + 80(SB)/8, $0.623271047682013536E-02
    41	DATA ·atanhtab2076<> + 88(SB)/8, $0.118140812789696885E-01
    42	DATA ·atanhtab2076<> + 96(SB)/8, $0.187681358930914206E-01
    43	DATA ·atanhtab2076<> + 104(SB)/8, $0.269985148668178992E-01
    44	DATA ·atanhtab2076<> + 112(SB)/8, $0.364186619761331328E-01
    45	DATA ·atanhtab2076<> + 120(SB)/8, $0.469505379381388441E-01
    46	GLOBL ·atanhtab2076<> + 0(SB), RODATA, $128
    47	
    48	// Table of +/- .5
    49	DATA ·atanhtabh2075<> + 0(SB)/8, $0.5
    50	DATA ·atanhtabh2075<> + 8(SB)/8, $-.5
    51	GLOBL ·atanhtabh2075<> + 0(SB), RODATA, $16
    52	
    53	// Atanh returns the inverse hyperbolic tangent of the argument.
    54	//
    55	// Special cases are:
    56	//      Atanh(1) = +Inf
    57	//      Atanh(±0) = ±0
    58	//      Atanh(-1) = -Inf
    59	//      Atanh(x) = NaN if x < -1 or x > 1
    60	//      Atanh(NaN) = NaN
    61	// The algorithm used is minimax polynomial approximation
    62	// with coefficients determined with a Remez exchange algorithm.
    63	
    64	TEXT    ·atanhAsm(SB), NOSPLIT, $0-16
    65	    FMOVD   x+0(FP), F0
    66	    MOVD    $·atanhrodataL10<>+0(SB), R5
    67	    LGDR    F0, R1
    68	    WORD    $0xC0393FEF //iilf  %r3,1072693247
    69	    BYTE    $0xFF
    70	    BYTE    $0xFF
    71	    SRAD    $32, R1
    72	    WORD    $0xB9170021 //llgtr %r2,%r1
    73	    MOVW    R2, R6
    74	    MOVW    R3, R7
    75	    CMPBGT  R6, R7, L2
    76	    WORD    $0xC0392FFF //iilf  %r3,805306367
    77	    BYTE    $0xFF
    78	    BYTE    $0xFF
    79	    MOVW    R2, R6
    80	    MOVW    R3, R7
    81	    CMPBGT  R6, R7, L9
    82	L3:
    83	    FMOVD   144(R5), F2
    84	    FMADD   F2, F0, F0
    85	L1:
    86	    FMOVD   F0, ret+8(FP)
    87	    RET
    88	
    89	L2:
    90	    WORD    $0xED005088 //cdb   %f0,.L12-.L10(%r5)
    91	    BYTE    $0x00
    92	    BYTE    $0x19
    93	    BEQ L5
    94	    WORD    $0xED005080 //cdb   %f0,.L13-.L10(%r5)
    95	    BYTE    $0x00
    96	    BYTE    $0x19
    97	    BEQ L5
    98	    WFCEDBS V0, V0, V2
    99	    BVS L1
   100	    FMOVD   120(R5), F0
   101	    BR  L1
   102	L5:
   103	    WORD    $0xED005070 //ddb   %f0,.L15-.L10(%r5)
   104	    BYTE    $0x00
   105	    BYTE    $0x1D
   106	    FMOVD   F0, ret+8(FP)
   107	    RET
   108	
   109	L9:
   110	    FMOVD   F0, F2
   111	    MOVD    $·atanhtabh2075<>+0(SB), R2
   112	    SRW $31, R1, R1
   113	    FMOVD   104(R5), F4
   114	    MOVW    R1, R1
   115	    SLD $3, R1, R1
   116	    WORD    $0x68012000 //ld    %f0,0(%r1,%r2)
   117	    WFMADB  V2, V4, V0, V4
   118	    VLEG    $0, 96(R5), V16
   119	    FDIV    F4, F2
   120	    WORD    $0xC0298006 //iilf  %r2,2147909631
   121	    BYTE    $0x7F
   122	    BYTE    $0xFF
   123	    FMOVD   88(R5), F6
   124	    FMOVD   80(R5), F1
   125	    FMOVD   72(R5), F7
   126	    FMOVD   64(R5), F5
   127	    FMOVD   F2, F4
   128	    WORD    $0xED405088 //adb   %f4,.L12-.L10(%r5)
   129	    BYTE    $0x00
   130	    BYTE    $0x1A
   131	    LGDR    F4, R4
   132	    SRAD    $32, R4
   133	    FMOVD   F4, F3
   134	    WORD    $0xED305088 //sdb   %f3,.L12-.L10(%r5)
   135	    BYTE    $0x00
   136	    BYTE    $0x1B
   137	    SUBW    R4, R2
   138	    WFSDB   V3, V2, V3
   139	    RISBGZ  $32, $47, $0, R2, R1
   140	    SLD $32, R1, R1
   141	    LDGR    R1, F2
   142	    WFMADB  V4, V2, V16, V4
   143	    SRAW    $8, R2, R1
   144	    WFMADB  V4, V5, V6, V5
   145	    WFMDB   V4, V4, V6
   146	    WFMADB  V4, V1, V7, V1
   147	    WFMADB  V2, V3, V4, V2
   148	    WFMADB  V1, V6, V5, V1
   149	    FMOVD   56(R5), F3
   150	    FMOVD   48(R5), F5
   151	    WFMADB  V4, V5, V3, V4
   152	    FMOVD   40(R5), F3
   153	    FMADD   F1, F6, F4
   154	    FMOVD   32(R5), F1
   155	    FMADD   F3, F2, F1
   156	    ANDW    $0xFFFFFF00, R1
   157	    WFMADB  V6, V4, V1, V6
   158	    FMOVD   24(R5), F3
   159	    ORW $0x45000000, R1
   160	    WFMADB  V2, V6, V3, V6
   161	    VLVGF   $0, R1, V4
   162	    LDEBR   F4, F4
   163	    RISBGZ  $57, $60, $51, R2, R2
   164	    MOVD    $·atanhtab2076<>+0(SB), R1
   165	    FMOVD   16(R5), F3
   166	    WORD    $0x68521000 //ld    %f5,0(%r2,%r1)
   167	    FMOVD   8(R5), F1
   168	    WFMADB  V2, V6, V5, V2
   169	    WFMADB  V4, V3, V1, V4
   170	    FMOVD   0(R5), F6
   171	    FMADD   F6, F4, F2
   172	    FMUL    F2, F0
   173	    FMOVD   F0, ret+8(FP)
   174	    RET

View as plain text