acosh_s390x.s raw

   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  	LGDR	F0, R1
  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  	LGDR	F0, R5
  89  	SRAD	$32, R5
  90  	MOVH	$0x0, R1
  91  	SUBW	R5, R3
  92  	FMOVD	$0, F10
  93  	RISBGZ	$32, $47, $0, R3, R4
  94  	RISBGZ	$57, $60, $51, R3, R3
  95  	BYTE	$0x18	//lr	%r2,%r4
  96  	BYTE	$0x24
  97  	RISBGN	$0, $31, $32, R4, R1
  98  	SUBW	$0x100000, R2
  99  	SRAW	$8, R2, R2
 100  	ORW	$0x45000000, R2
 101  L5:
 102  	LDGR	R1, F0
 103  	FMOVD	104(R9), F2
 104  	FMADD	F8, F0, F2
 105  	FMOVD	96(R9), F4
 106  	WFMADB	V10, V0, V2, V0
 107  	FMOVD	88(R9), F6
 108  	FMOVD	80(R9), F2
 109  	WFMADB	V0, V6, V4, V6
 110  	FMOVD	72(R9), F1
 111  	WFMDB	V0, V0, V4
 112  	WFMADB	V0, V1, V2, V1
 113  	FMOVD	64(R9), F2
 114  	WFMADB	V6, V4, V1, V6
 115  	FMOVD	56(R9), F1
 116  	RISBGZ	$57, $60, $0, R3, R3
 117  	WFMADB	V0, V2, V1, V2
 118  	FMOVD	48(R9), F1
 119  	WFMADB	V4, V6, V2, V6
 120  	FMOVD	40(R9), F2
 121  	WFMADB	V0, V1, V2, V1
 122  	VLVGF	$0, R2, V2
 123  	WFMADB	V4, V6, V1, V4
 124  	LDEBR	F2, F2
 125  	FMOVD	32(R9), F6
 126  	WFMADB	V0, V4, V6, V4
 127  	FMOVD	24(R9), F1
 128  	FMOVD	16(R9), F6
 129  	MOVD	$·acoshtab2068<>+0(SB), R1
 130  	WFMADB	V2, V1, V6, V2
 131  	FMOVD	0(R3)(R1*1), F3
 132  	WFMADB	V0, V4, V3, V0
 133  	FMOVD	8(R9), F4
 134  	FMADD	F4, F2, F0
 135  	FMOVD	F0, ret+8(FP)
 136  	RET
 137  L10:
 138  	FMOVD	F0, F8
 139  	FMOVD	0(R9), F0
 140  	FMADD	F8, F8, F0
 141  	LTDBR	F0, F0
 142  	FSQRT	F0, F10
 143  L4:
 144  	WFADB	V10, V8, V0
 145  	WORD	$0xC0398006	//iilf	%r3,2147909631
 146  	BYTE	$0x7F
 147  	BYTE	$0xFF
 148  	LGDR	F0, R5
 149  	SRAD	$32, R5
 150  	MOVH	$0x0, R1
 151  	SUBW	R5, R3
 152  	SRAW	$8, R3, R2
 153  	RISBGZ	$32, $47, $0, R3, R4
 154  	ANDW	$0xFFFFFF00, R2
 155  	RISBGZ	$57, $60, $51, R3, R3
 156  	ORW	$0x45000000, R2
 157  	RISBGN	$0, $31, $32, R4, R1
 158  	BR	L5
 159