...
Run Format

Text file src/math/atanh_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
     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	    WORD    $0xB3CD0010	//lgdr %r1, %f0
    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	    WORD    $0xB3CD0044	//lgdr %r4, %f4
   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	    WORD    $0xEC1220AF //risbg %r1,%r2,32,128+47,0
   140	    BYTE    $0x00
   141	    BYTE    $0x55
   142	    SLD $32, R1, R1
   143	    WORD    $0xB3C10021 //ldgr  %f2,%r1
   144	    WFMADB  V4, V2, V16, V4
   145	    SRAW    $8, R2, R1
   146	    WFMADB  V4, V5, V6, V5
   147	    WFMDB   V4, V4, V6
   148	    WFMADB  V4, V1, V7, V1
   149	    WFMADB  V2, V3, V4, V2
   150	    WFMADB  V1, V6, V5, V1
   151	    FMOVD   56(R5), F3
   152	    FMOVD   48(R5), F5
   153	    WFMADB  V4, V5, V3, V4
   154	    FMOVD   40(R5), F3
   155	    FMADD   F1, F6, F4
   156	    FMOVD   32(R5), F1
   157	    FMADD   F3, F2, F1
   158	    ANDW    $0xFFFFFF00, R1
   159	    WFMADB  V6, V4, V1, V6
   160	    FMOVD   24(R5), F3
   161	    ORW $0x45000000, R1
   162	    WFMADB  V2, V6, V3, V6
   163	    VLVGF   $0, R1, V4
   164	    LDEBR   F4, F4
   165	    WORD    $0xEC2239BC //risbg %r2,%r2,57,128+60,64-13
   166	    BYTE    $0x33
   167	    BYTE    $0x55
   168	    MOVD    $·atanhtab2076<>+0(SB), R1
   169	    FMOVD   16(R5), F3
   170	    WORD    $0x68521000 //ld    %f5,0(%r2,%r1)
   171	    FMOVD   8(R5), F1
   172	    WFMADB  V2, V6, V5, V2
   173	    WFMADB  V4, V3, V1, V4
   174	    FMOVD   0(R5), F6
   175	    FMADD   F6, F4, F2
   176	    FMUL    F2, F0
   177	    FMOVD   F0, ret+8(FP)
   178	    RET

View as plain text