Text file src/math/asin_s390x.s

     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 ·asinrodataL15<> + 0(SB)/8, $-1.309611320495605469
     9  DATA ·asinrodataL15<> + 8(SB)/8, $0x3ff921fb54442d18
    10  DATA ·asinrodataL15<> + 16(SB)/8, $0xbff921fb54442d18
    11  DATA ·asinrodataL15<> + 24(SB)/8, $1.309611320495605469
    12  DATA ·asinrodataL15<> + 32(SB)/8, $-0.0
    13  DATA ·asinrodataL15<> + 40(SB)/8, $1.199437040755305217
    14  DATA ·asinrodataL15<> + 48(SB)/8, $0.166666666666651626E+00
    15  DATA ·asinrodataL15<> + 56(SB)/8, $0.750000000042621169E-01
    16  DATA ·asinrodataL15<> + 64(SB)/8, $0.446428567178116477E-01
    17  DATA ·asinrodataL15<> + 72(SB)/8, $0.303819660378071894E-01
    18  DATA ·asinrodataL15<> + 80(SB)/8, $0.223715011892010405E-01
    19  DATA ·asinrodataL15<> + 88(SB)/8, $0.173659424522364952E-01
    20  DATA ·asinrodataL15<> + 96(SB)/8, $0.137810186504372266E-01
    21  DATA ·asinrodataL15<> + 104(SB)/8, $0.134066870961173521E-01
    22  DATA ·asinrodataL15<> + 112(SB)/8, $-.412335502831898721E-02
    23  DATA ·asinrodataL15<> + 120(SB)/8, $0.867383739532082719E-01
    24  DATA ·asinrodataL15<> + 128(SB)/8, $-.328765950607171649E+00
    25  DATA ·asinrodataL15<> + 136(SB)/8, $0.110401073869414626E+01
    26  DATA ·asinrodataL15<> + 144(SB)/8, $-.270694366992537307E+01
    27  DATA ·asinrodataL15<> + 152(SB)/8, $0.500196500770928669E+01
    28  DATA ·asinrodataL15<> + 160(SB)/8, $-.665866959108585165E+01
    29  DATA ·asinrodataL15<> + 168(SB)/8, $-.344895269334086578E+01
    30  DATA ·asinrodataL15<> + 176(SB)/8, $0.927437952918301659E+00
    31  DATA ·asinrodataL15<> + 184(SB)/8, $0.610487478874645653E+01
    32  DATA ·asinrodataL15<> + 192(SB)/8, $0x7ff8000000000000			//+Inf
    33  DATA ·asinrodataL15<> + 200(SB)/8, $-1.0
    34  DATA ·asinrodataL15<> + 208(SB)/8, $1.0
    35  DATA ·asinrodataL15<> + 216(SB)/8, $1.00000000000000000e-20
    36  GLOBL ·asinrodataL15<> + 0(SB), RODATA, $224
    37  
    38  // Asin returns the arcsine, in radians, of the argument.
    39  //
    40  // Special cases are:
    41  //      Asin(±0) = ±0=
    42  //      Asin(x) = NaN if x < -1 or x > 1
    43  // The algorithm used is minimax polynomial approximation
    44  // with coefficients determined with a Remez exchange algorithm.
    45  
    46  TEXT	·asinAsm(SB), NOSPLIT, $0-16
    47  	FMOVD	x+0(FP), F0
    48  	MOVD	$·asinrodataL15<>+0(SB), R9
    49  	LGDR	F0, R7
    50  	FMOVD	F0, F8
    51  	SRAD	$32, R7
    52  	WORD	$0xC0193FE6 //iilf  %r1,1072079005
    53  	BYTE	$0xA0
    54  	BYTE	$0x9D
    55  	WORD	$0xB91700C7 //llgtr %r12,%r7
    56  	MOVW	R12, R8
    57  	MOVW	R1, R6
    58  	CMPBGT	R8, R6, L2
    59  	WORD	$0xC0193BFF //iilf  %r1,1006632959
    60  	BYTE	$0xFF
    61  	BYTE	$0xFF
    62  	MOVW	R1, R6
    63  	CMPBGT	R8, R6, L13
    64  L3:
    65  	FMOVD	216(R9), F0
    66  	FMADD	F0, F8, F8
    67  L1:
    68  	FMOVD	F8, ret+8(FP)
    69  	RET
    70  L2:
    71  	WORD	$0xC0193FEF	//iilf	%r1,1072693247
    72  	BYTE	$0xFF
    73  	BYTE	$0xFF
    74  	CMPW	R12, R1
    75  	BLE	L14
    76  L5:
    77  	WORD	$0xED0090D0	//cdb	%f0,.L17-.L15(%r9)
    78  	BYTE	$0x00
    79  	BYTE	$0x19
    80  	BEQ		L9
    81  	WORD	$0xED0090C8	//cdb	%f0,.L18-.L15(%r9)
    82  	BYTE	$0x00
    83  	BYTE	$0x19
    84  	BEQ	L10
    85  	WFCEDBS	V8, V8, V0
    86  	BVS	L1
    87  	FMOVD	192(R9), F8
    88  	BR	L1
    89  L13:
    90  	WFMDB	V0, V0, V10
    91  L4:
    92  	WFMDB	V10, V10, V0
    93  	FMOVD	184(R9), F6
    94  	FMOVD	176(R9), F2
    95  	FMOVD	168(R9), F4
    96  	WFMADB	V0, V2, V6, V2
    97  	FMOVD	160(R9), F6
    98  	WFMADB	V0, V4, V6, V4
    99  	FMOVD	152(R9), F6
   100  	WFMADB	V0, V2, V6, V2
   101  	FMOVD	144(R9), F6
   102  	WFMADB	V0, V4, V6, V4
   103  	FMOVD	136(R9), F6
   104  	WFMADB	V0, V2, V6, V2
   105  	WORD	$0xC0193FE6	//iilf	%r1,1072079005
   106  	BYTE	$0xA0
   107  	BYTE	$0x9D
   108  	FMOVD	128(R9), F6
   109  	WFMADB	V0, V4, V6, V4
   110  	FMOVD	120(R9), F6
   111  	WFMADB	V0, V2, V6, V2
   112  	FMOVD	112(R9), F6
   113  	WFMADB	V0, V4, V6, V4
   114  	FMOVD	104(R9), F6
   115  	WFMADB	V0, V2, V6, V2
   116  	FMOVD	96(R9), F6
   117  	WFMADB	V0, V4, V6, V4
   118  	FMOVD	88(R9), F6
   119  	WFMADB	V0, V2, V6, V2
   120  	FMOVD	80(R9), F6
   121  	WFMADB	V0, V4, V6, V4
   122  	FMOVD	72(R9), F6
   123  	WFMADB	V0, V2, V6, V2
   124  	FMOVD	64(R9), F6
   125  	WFMADB	V0, V4, V6, V4
   126  	FMOVD	56(R9), F6
   127  	WFMADB	V0, V2, V6, V2
   128  	FMOVD	48(R9), F6
   129  	WFMADB	V0, V4, V6, V0
   130  	WFMDB	V8, V10, V4
   131  	FMADD	F2, F10, F0
   132  	FMADD	F0, F4, F8
   133  	CMPW	R12, R1
   134  	BLE	L1
   135  	FMOVD	40(R9), F0
   136  	FMADD	F0, F1, F8
   137  	FMOVD	F8, ret+8(FP)
   138  	RET
   139  L14:
   140  	FMOVD	200(R9), F0
   141  	FMADD	F8, F8, F0
   142  	WORD	$0xB31300A0	//lcdbr	%f10,%f0
   143  	WORD	$0xED009020	//cdb	%f0,.L39-.L15(%r9)
   144  	BYTE	$0x00
   145  	BYTE	$0x19
   146  	FSQRT	F10, F8
   147  L6:
   148  	MOVW	R7, R6
   149  	CMPBLE	R6, $0, L8
   150  	WORD	$0xB3130088	//lcdbr	%f8,%f8
   151  	FMOVD	24(R9), F1
   152  	BR	L4
   153  L10:
   154  	FMOVD	16(R9), F8
   155  	BR	L1
   156  L9:
   157  	FMOVD	8(R9), F8
   158  	FMOVD	F8, ret+8(FP)
   159  	RET
   160  L8:
   161  	FMOVD	0(R9), F1
   162  	BR	L4
   163  

View as plain text