...
Run Format

Text file src/math/acosh_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 ·acoshrodataL11<> + 0(SB)/8, $-1.0
     9	DATA ·acoshrodataL11<> + 8(SB)/8, $.41375273347623353626
    10	DATA ·acoshrodataL11<> + 16(SB)/8, $.51487302528619766235E+04
    11	DATA ·acoshrodataL11<> + 24(SB)/8, $-1.67526912689208984375
    12	DATA ·acoshrodataL11<> + 32(SB)/8, $0.181818181818181826E+00
    13	DATA ·acoshrodataL11<> + 40(SB)/8, $-.165289256198351540E-01
    14	DATA ·acoshrodataL11<> + 48(SB)/8, $0.200350613573012186E-02
    15	DATA ·acoshrodataL11<> + 56(SB)/8, $-.273205381970859341E-03
    16	DATA ·acoshrodataL11<> + 64(SB)/8, $0.397389654305194527E-04
    17	DATA ·acoshrodataL11<> + 72(SB)/8, $0.938370938292558173E-06
    18	DATA ·acoshrodataL11<> + 80(SB)/8, $-.602107458843052029E-05
    19	DATA ·acoshrodataL11<> + 88(SB)/8, $0.212881813645679599E-07
    20	DATA ·acoshrodataL11<> + 96(SB)/8, $-.148682720127920854E-06
    21	DATA ·acoshrodataL11<> + 104(SB)/8, $-5.5
    22	DATA ·acoshrodataL11<> + 112(SB)/8, $0x7ff8000000000000      //Nan
    23	GLOBL ·acoshrodataL11<> + 0(SB), RODATA, $120
    24	
    25	// Table of log correction terms
    26	DATA ·acoshtab2068<> + 0(SB)/8, $0.585235384085551248E-01
    27	DATA ·acoshtab2068<> + 8(SB)/8, $0.412206153771168640E-01
    28	DATA ·acoshtab2068<> + 16(SB)/8, $0.273839003221648339E-01
    29	DATA ·acoshtab2068<> + 24(SB)/8, $0.166383778368856480E-01
    30	DATA ·acoshtab2068<> + 32(SB)/8, $0.866678223433169637E-02
    31	DATA ·acoshtab2068<> + 40(SB)/8, $0.319831684989627514E-02
    32	DATA ·acoshtab2068<> + 48(SB)/8, $0.0
    33	DATA ·acoshtab2068<> + 56(SB)/8, $-.113006378583725549E-02
    34	DATA ·acoshtab2068<> + 64(SB)/8, $-.367979419636602491E-03
    35	DATA ·acoshtab2068<> + 72(SB)/8, $0.213172484510484979E-02
    36	DATA ·acoshtab2068<> + 80(SB)/8, $0.623271047682013536E-02
    37	DATA ·acoshtab2068<> + 88(SB)/8, $0.118140812789696885E-01
    38	DATA ·acoshtab2068<> + 96(SB)/8, $0.187681358930914206E-01
    39	DATA ·acoshtab2068<> + 104(SB)/8, $0.269985148668178992E-01
    40	DATA ·acoshtab2068<> + 112(SB)/8, $0.364186619761331328E-01
    41	DATA ·acoshtab2068<> + 120(SB)/8, $0.469505379381388441E-01
    42	GLOBL ·acoshtab2068<> + 0(SB), RODATA, $128
    43	
    44	// Acosh returns the inverse hyperbolic cosine of the argument.
    45	//
    46	// Special cases are:
    47	//      Acosh(+Inf) = +Inf
    48	//      Acosh(x) = NaN if x < 1
    49	//      Acosh(NaN) = NaN
    50	// The algorithm used is minimax polynomial approximation
    51	// with coefficients determined with a Remez exchange algorithm.
    52	
    53	TEXT	·acoshAsm(SB), NOSPLIT, $0-16
    54		FMOVD	x+0(FP), F0
    55		MOVD	$·acoshrodataL11<>+0(SB), R9
    56		WORD	$0xB3CD0010	//lgdr %r1, %f0
    57		WORD	$0xC0295FEF	//iilf	%r2,1609564159
    58		BYTE	$0xFF
    59		BYTE	$0xFF
    60		SRAD	$32, R1
    61		CMPW	R1, R2
    62		BGT	L2
    63		WORD	$0xC0293FEF	//iilf	%r2,1072693247
    64		BYTE	$0xFF
    65		BYTE	$0xFF
    66		CMPW	R1, R2
    67		BGT	L10
    68	L3:
    69		WFCEDBS	V0, V0, V2
    70		BVS	L1
    71		FMOVD	112(R9), F0
    72	L1:
    73		FMOVD	F0, ret+8(FP)
    74		RET
    75	L2:
    76		WORD	$0xC0297FEF	//iilf	%r2,2146435071
    77		BYTE	$0xFF
    78		BYTE	$0xFF
    79		MOVW	R1, R6
    80		MOVW	R2, R7
    81		CMPBGT	R6, R7, L1
    82		FMOVD	F0, F8
    83		FMOVD	$0, F0
    84		WFADB	V0, V8, V0
    85		WORD	$0xC0398006	//iilf	%r3,2147909631
    86		BYTE	$0x7F
    87		BYTE	$0xFF
    88		WORD	$0xB3CD0050	//lgdr %r5, %f0
    89		SRAD	$32, R5
    90		MOVH	$0x0, R1
    91		SUBW	R5, R3
    92		FMOVD	$0, F10
    93		WORD	$0xEC4320AF	//risbg	%r4,%r3,32,128+47,0
    94		BYTE	$0x00
    95		BYTE	$0x55
    96		WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,64-13
    97		BYTE	$0x33
    98		BYTE	$0x55
    99		BYTE	$0x18	//lr	%r2,%r4
   100		BYTE	$0x24
   101		WORD	$0xEC14001F	//risbgn	%r1,%r4,64-64+0,64-64+0+32-1,64-0-32
   102		BYTE	$0x20
   103		BYTE	$0x59
   104		SUBW	$0x100000, R2
   105		SRAW	$8, R2, R2
   106		ORW	$0x45000000, R2
   107	L5:
   108		WORD	$0xB3C10001	//ldgr	%f0,%r1
   109		FMOVD	104(R9), F2
   110		FMADD	F8, F0, F2
   111		FMOVD	96(R9), F4
   112		WFMADB	V10, V0, V2, V0
   113		FMOVD	88(R9), F6
   114		FMOVD	80(R9), F2
   115		WFMADB	V0, V6, V4, V6
   116		FMOVD	72(R9), F1
   117		WFMDB	V0, V0, V4
   118		WFMADB	V0, V1, V2, V1
   119		FMOVD	64(R9), F2
   120		WFMADB	V6, V4, V1, V6
   121		FMOVD	56(R9), F1
   122		WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,0
   123		BYTE	$0x00
   124		BYTE	$0x55
   125		WFMADB	V0, V2, V1, V2
   126		FMOVD	48(R9), F1
   127		WFMADB	V4, V6, V2, V6
   128		FMOVD	40(R9), F2
   129		WFMADB	V0, V1, V2, V1
   130		VLVGF	$0, R2, V2
   131		WFMADB	V4, V6, V1, V4
   132		LDEBR	F2, F2
   133		FMOVD	32(R9), F6
   134		WFMADB	V0, V4, V6, V4
   135		FMOVD	24(R9), F1
   136		FMOVD	16(R9), F6
   137		MOVD	$·acoshtab2068<>+0(SB), R1
   138		WFMADB	V2, V1, V6, V2
   139		FMOVD	0(R3)(R1*1), F3
   140		WFMADB	V0, V4, V3, V0
   141		FMOVD	8(R9), F4
   142		FMADD	F4, F2, F0
   143		FMOVD	F0, ret+8(FP)
   144		RET
   145	L10:
   146		FMOVD	F0, F8
   147		FMOVD	0(R9), F0
   148		FMADD	F8, F8, F0
   149		WORD	$0xB3120000	//ltdbr	%f0,%f0
   150		FSQRT	F0, F10
   151	L4:
   152		WFADB	V10, V8, V0
   153		WORD	$0xC0398006	//iilf	%r3,2147909631
   154		BYTE	$0x7F
   155		BYTE	$0xFF
   156		WORD	$0xB3CD0050	//lgdr %r5, %f0
   157		SRAD	$32, R5
   158		MOVH	$0x0, R1
   159		SUBW	R5, R3
   160		SRAW	$8, R3, R2
   161		WORD	$0xEC4320AF	//risbg	%r4,%r3,32,128+47,0
   162		BYTE	$0x00
   163		BYTE	$0x55
   164		ANDW	$0xFFFFFF00, R2
   165		WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,64-13
   166		BYTE	$0x33
   167		BYTE	$0x55
   168		ORW	$0x45000000, R2
   169		WORD	$0xEC14001F	//risbgn	%r1,%r4,64-64+0,64-64+0+32-1,64-0-32
   170		BYTE	$0x20
   171		BYTE	$0x59
   172		BR	L5

View as plain text