// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "textflag.h"

// Minimax polynomial coefficients and other constants
DATA ·acoshrodataL11<> + 0(SB)/8, $-1.0
DATA ·acoshrodataL11<> + 8(SB)/8, $.41375273347623353626
DATA ·acoshrodataL11<> + 16(SB)/8, $.51487302528619766235E+04
DATA ·acoshrodataL11<> + 24(SB)/8, $-1.67526912689208984375
DATA ·acoshrodataL11<> + 32(SB)/8, $0.181818181818181826E+00
DATA ·acoshrodataL11<> + 40(SB)/8, $-.165289256198351540E-01
DATA ·acoshrodataL11<> + 48(SB)/8, $0.200350613573012186E-02
DATA ·acoshrodataL11<> + 56(SB)/8, $-.273205381970859341E-03
DATA ·acoshrodataL11<> + 64(SB)/8, $0.397389654305194527E-04
DATA ·acoshrodataL11<> + 72(SB)/8, $0.938370938292558173E-06
DATA ·acoshrodataL11<> + 80(SB)/8, $-.602107458843052029E-05
DATA ·acoshrodataL11<> + 88(SB)/8, $0.212881813645679599E-07
DATA ·acoshrodataL11<> + 96(SB)/8, $-.148682720127920854E-06
DATA ·acoshrodataL11<> + 104(SB)/8, $-5.5
DATA ·acoshrodataL11<> + 112(SB)/8, $0x7ff8000000000000      //Nan
GLOBL ·acoshrodataL11<> + 0(SB), RODATA, $120

// Table of log correction terms
DATA ·acoshtab2068<> + 0(SB)/8, $0.585235384085551248E-01
DATA ·acoshtab2068<> + 8(SB)/8, $0.412206153771168640E-01
DATA ·acoshtab2068<> + 16(SB)/8, $0.273839003221648339E-01
DATA ·acoshtab2068<> + 24(SB)/8, $0.166383778368856480E-01
DATA ·acoshtab2068<> + 32(SB)/8, $0.866678223433169637E-02
DATA ·acoshtab2068<> + 40(SB)/8, $0.319831684989627514E-02
DATA ·acoshtab2068<> + 48(SB)/8, $0.0
DATA ·acoshtab2068<> + 56(SB)/8, $-.113006378583725549E-02
DATA ·acoshtab2068<> + 64(SB)/8, $-.367979419636602491E-03
DATA ·acoshtab2068<> + 72(SB)/8, $0.213172484510484979E-02
DATA ·acoshtab2068<> + 80(SB)/8, $0.623271047682013536E-02
DATA ·acoshtab2068<> + 88(SB)/8, $0.118140812789696885E-01
DATA ·acoshtab2068<> + 96(SB)/8, $0.187681358930914206E-01
DATA ·acoshtab2068<> + 104(SB)/8, $0.269985148668178992E-01
DATA ·acoshtab2068<> + 112(SB)/8, $0.364186619761331328E-01
DATA ·acoshtab2068<> + 120(SB)/8, $0.469505379381388441E-01
GLOBL ·acoshtab2068<> + 0(SB), RODATA, $128

// Acosh returns the inverse hyperbolic cosine of the argument.
//
// Special cases are:
//      Acosh(+Inf) = +Inf
//      Acosh(x) = NaN if x < 1
//      Acosh(NaN) = NaN
// The algorithm used is minimax polynomial approximation
// with coefficients determined with a Remez exchange algorithm.

TEXT	·acoshAsm(SB), NOSPLIT, $0-16
	FMOVD	x+0(FP), F0
	MOVD	$·acoshrodataL11<>+0(SB), R9
	WORD	$0xB3CD0010	//lgdr %r1, %f0
	WORD	$0xC0295FEF	//iilf	%r2,1609564159
	BYTE	$0xFF
	BYTE	$0xFF
	SRAD	$32, R1
	CMPW	R1, R2
	BGT	L2
	WORD	$0xC0293FEF	//iilf	%r2,1072693247
	BYTE	$0xFF
	BYTE	$0xFF
	CMPW	R1, R2
	BGT	L10
L3:
	WFCEDBS	V0, V0, V2
	BVS	L1
	FMOVD	112(R9), F0
L1:
	FMOVD	F0, ret+8(FP)
	RET
L2:
	WORD	$0xC0297FEF	//iilf	%r2,2146435071
	BYTE	$0xFF
	BYTE	$0xFF
	MOVW	R1, R6
	MOVW	R2, R7
	CMPBGT	R6, R7, L1
	FMOVD	F0, F8
	FMOVD	$0, F0
	WFADB	V0, V8, V0
	WORD	$0xC0398006	//iilf	%r3,2147909631
	BYTE	$0x7F
	BYTE	$0xFF
	WORD	$0xB3CD0050	//lgdr %r5, %f0
	SRAD	$32, R5
	MOVH	$0x0, R1
	SUBW	R5, R3
	FMOVD	$0, F10
	WORD	$0xEC4320AF	//risbg	%r4,%r3,32,128+47,0
	BYTE	$0x00
	BYTE	$0x55
	WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,64-13
	BYTE	$0x33
	BYTE	$0x55
	BYTE	$0x18	//lr	%r2,%r4
	BYTE	$0x24
	WORD	$0xEC14001F	//risbgn	%r1,%r4,64-64+0,64-64+0+32-1,64-0-32
	BYTE	$0x20
	BYTE	$0x59
	SUBW	$0x100000, R2
	SRAW	$8, R2, R2
	ORW	$0x45000000, R2
L5:
	WORD	$0xB3C10001	//ldgr	%f0,%r1
	FMOVD	104(R9), F2
	FMADD	F8, F0, F2
	FMOVD	96(R9), F4
	WFMADB	V10, V0, V2, V0
	FMOVD	88(R9), F6
	FMOVD	80(R9), F2
	WFMADB	V0, V6, V4, V6
	FMOVD	72(R9), F1
	WFMDB	V0, V0, V4
	WFMADB	V0, V1, V2, V1
	FMOVD	64(R9), F2
	WFMADB	V6, V4, V1, V6
	FMOVD	56(R9), F1
	WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,0
	BYTE	$0x00
	BYTE	$0x55
	WFMADB	V0, V2, V1, V2
	FMOVD	48(R9), F1
	WFMADB	V4, V6, V2, V6
	FMOVD	40(R9), F2
	WFMADB	V0, V1, V2, V1
	VLVGF	$0, R2, V2
	WFMADB	V4, V6, V1, V4
	LDEBR	F2, F2
	FMOVD	32(R9), F6
	WFMADB	V0, V4, V6, V4
	FMOVD	24(R9), F1
	FMOVD	16(R9), F6
	MOVD	$·acoshtab2068<>+0(SB), R1
	WFMADB	V2, V1, V6, V2
	FMOVD	0(R3)(R1*1), F3
	WFMADB	V0, V4, V3, V0
	FMOVD	8(R9), F4
	FMADD	F4, F2, F0
	FMOVD	F0, ret+8(FP)
	RET
L10:
	FMOVD	F0, F8
	FMOVD	0(R9), F0
	FMADD	F8, F8, F0
	WORD	$0xB3120000	//ltdbr	%f0,%f0
	FSQRT	F0, F10
L4:
	WFADB	V10, V8, V0
	WORD	$0xC0398006	//iilf	%r3,2147909631
	BYTE	$0x7F
	BYTE	$0xFF
	WORD	$0xB3CD0050	//lgdr %r5, %f0
	SRAD	$32, R5
	MOVH	$0x0, R1
	SUBW	R5, R3
	SRAW	$8, R3, R2
	WORD	$0xEC4320AF	//risbg	%r4,%r3,32,128+47,0
	BYTE	$0x00
	BYTE	$0x55
	ANDW	$0xFFFFFF00, R2
	WORD	$0xEC3339BC	//risbg	%r3,%r3,57,128+60,64-13
	BYTE	$0x33
	BYTE	$0x55
	ORW	$0x45000000, R2
	WORD	$0xEC14001F	//risbgn	%r1,%r4,64-64+0,64-64+0+32-1,64-0-32
	BYTE	$0x20
	BYTE	$0x59
	BR	L5
