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