github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/math/acosh_s390x.s (about) 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