github.com/mattn/go@v0.0.0-20171011075504-07f7db3ea99f/src/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 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