github.com/twelsh-aw/go/src@v0.0.0-20230516233729-a56fe86a7c81/math/acos_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 ·acosrodataL13<> + 0(SB)/8, $0.314159265358979323E+01 //pi 9 DATA ·acosrodataL13<> + 8(SB)/8, $-0.0 10 DATA ·acosrodataL13<> + 16(SB)/8, $0x7ff8000000000000 //Nan 11 DATA ·acosrodataL13<> + 24(SB)/8, $-1.0 12 DATA ·acosrodataL13<> + 32(SB)/8, $1.0 13 DATA ·acosrodataL13<> + 40(SB)/8, $0.166666666666651626E+00 14 DATA ·acosrodataL13<> + 48(SB)/8, $0.750000000042621169E-01 15 DATA ·acosrodataL13<> + 56(SB)/8, $0.446428567178116477E-01 16 DATA ·acosrodataL13<> + 64(SB)/8, $0.303819660378071894E-01 17 DATA ·acosrodataL13<> + 72(SB)/8, $0.223715011892010405E-01 18 DATA ·acosrodataL13<> + 80(SB)/8, $0.173659424522364952E-01 19 DATA ·acosrodataL13<> + 88(SB)/8, $0.137810186504372266E-01 20 DATA ·acosrodataL13<> + 96(SB)/8, $0.134066870961173521E-01 21 DATA ·acosrodataL13<> + 104(SB)/8, $-.412335502831898721E-02 22 DATA ·acosrodataL13<> + 112(SB)/8, $0.867383739532082719E-01 23 DATA ·acosrodataL13<> + 120(SB)/8, $-.328765950607171649E+00 24 DATA ·acosrodataL13<> + 128(SB)/8, $0.110401073869414626E+01 25 DATA ·acosrodataL13<> + 136(SB)/8, $-.270694366992537307E+01 26 DATA ·acosrodataL13<> + 144(SB)/8, $0.500196500770928669E+01 27 DATA ·acosrodataL13<> + 152(SB)/8, $-.665866959108585165E+01 28 DATA ·acosrodataL13<> + 160(SB)/8, $-.344895269334086578E+01 29 DATA ·acosrodataL13<> + 168(SB)/8, $0.927437952918301659E+00 30 DATA ·acosrodataL13<> + 176(SB)/8, $0.610487478874645653E+01 31 DATA ·acosrodataL13<> + 184(SB)/8, $0.157079632679489656e+01 32 DATA ·acosrodataL13<> + 192(SB)/8, $0.0 33 GLOBL ·acosrodataL13<> + 0(SB), RODATA, $200 34 35 // Acos returns the arccosine, in radians, of the argument. 36 // 37 // Special case is: 38 // Acos(x) = NaN if x < -1 or x > 1 39 // The algorithm used is minimax polynomial approximation 40 // with coefficients determined with a Remez exchange algorithm. 41 42 TEXT ·acosAsm(SB), NOSPLIT, $0-16 43 FMOVD x+0(FP), F0 44 MOVD $·acosrodataL13<>+0(SB), R9 45 LGDR F0, R12 46 FMOVD F0, F10 47 SRAD $32, R12 48 WORD $0xC0293FE6 //iilf %r2,1072079005 49 BYTE $0xA0 50 BYTE $0x9D 51 WORD $0xB917001C //llgtr %r1,%r12 52 CMPW R1,R2 53 BGT L2 54 FMOVD 192(R9), F8 55 FMADD F0, F0, F8 56 FMOVD 184(R9), F1 57 L3: 58 WFMDB V8, V8, V2 59 FMOVD 176(R9), F6 60 FMOVD 168(R9), F0 61 FMOVD 160(R9), F4 62 WFMADB V2, V0, V6, V0 63 FMOVD 152(R9), F6 64 WFMADB V2, V4, V6, V4 65 FMOVD 144(R9), F6 66 WFMADB V2, V0, V6, V0 67 FMOVD 136(R9), F6 68 WFMADB V2, V4, V6, V4 69 FMOVD 128(R9), F6 70 WFMADB V2, V0, V6, V0 71 FMOVD 120(R9), F6 72 WFMADB V2, V4, V6, V4 73 FMOVD 112(R9), F6 74 WFMADB V2, V0, V6, V0 75 FMOVD 104(R9), F6 76 WFMADB V2, V4, V6, V4 77 FMOVD 96(R9), F6 78 WFMADB V2, V0, V6, V0 79 FMOVD 88(R9), F6 80 WFMADB V2, V4, V6, V4 81 FMOVD 80(R9), F6 82 WFMADB V2, V0, V6, V0 83 FMOVD 72(R9), F6 84 WFMADB V2, V4, V6, V4 85 FMOVD 64(R9), F6 86 WFMADB V2, V0, V6, V0 87 FMOVD 56(R9), F6 88 WFMADB V2, V4, V6, V4 89 FMOVD 48(R9), F6 90 WFMADB V2, V0, V6, V0 91 FMOVD 40(R9), F6 92 WFMADB V2, V4, V6, V2 93 FMOVD 192(R9), F4 94 WFMADB V8, V0, V2, V0 95 WFMADB V10, V8, V4, V8 96 FMADD F0, F8, F10 97 WFSDB V10, V1, V10 98 L1: 99 FMOVD F10, ret+8(FP) 100 RET 101 102 L2: 103 WORD $0xC0293FEF //iilf %r2,1072693247 104 BYTE $0xFF 105 BYTE $0xFF 106 CMPW R1, R2 107 BLE L12 108 L4: 109 WORD $0xED009020 //cdb %f0,.L34-.L13(%r9) 110 BYTE $0x00 111 BYTE $0x19 112 BEQ L8 113 WORD $0xED009018 //cdb %f0,.L35-.L13(%r9) 114 BYTE $0x00 115 BYTE $0x19 116 BEQ L9 117 WFCEDBS V10, V10, V0 118 BVS L1 119 FMOVD 16(R9), F10 120 BR L1 121 L12: 122 FMOVD 24(R9), F0 123 FMADD F10, F10, F0 124 WORD $0xB3130080 //lcdbr %f8,%f0 125 WORD $0xED009008 //cdb %f0,.L37-.L13(%r9) 126 BYTE $0x00 127 BYTE $0x19 128 FSQRT F8, F10 129 L5: 130 MOVW R12, R4 131 CMPBLE R4, $0, L7 132 WORD $0xB31300AA //lcdbr %f10,%f10 133 FMOVD $0, F1 134 BR L3 135 L9: 136 FMOVD 0(R9), F10 137 BR L1 138 L8: 139 FMOVD $0, F0 140 FMOVD F0, ret+8(FP) 141 RET 142 L7: 143 FMOVD 0(R9), F1 144 BR L3