|  | // Copyright 2017 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | #include "textflag.h" | 
|  |  | 
|  | // Minimax polynomial coefficients and other constants | 
|  | DATA ·asinrodataL15<> + 0(SB)/8, $-1.309611320495605469 | 
|  | DATA ·asinrodataL15<> + 8(SB)/8, $0x3ff921fb54442d18 | 
|  | DATA ·asinrodataL15<> + 16(SB)/8, $0xbff921fb54442d18 | 
|  | DATA ·asinrodataL15<> + 24(SB)/8, $1.309611320495605469 | 
|  | DATA ·asinrodataL15<> + 32(SB)/8, $-0.0 | 
|  | DATA ·asinrodataL15<> + 40(SB)/8, $1.199437040755305217 | 
|  | DATA ·asinrodataL15<> + 48(SB)/8, $0.166666666666651626E+00 | 
|  | DATA ·asinrodataL15<> + 56(SB)/8, $0.750000000042621169E-01 | 
|  | DATA ·asinrodataL15<> + 64(SB)/8, $0.446428567178116477E-01 | 
|  | DATA ·asinrodataL15<> + 72(SB)/8, $0.303819660378071894E-01 | 
|  | DATA ·asinrodataL15<> + 80(SB)/8, $0.223715011892010405E-01 | 
|  | DATA ·asinrodataL15<> + 88(SB)/8, $0.173659424522364952E-01 | 
|  | DATA ·asinrodataL15<> + 96(SB)/8, $0.137810186504372266E-01 | 
|  | DATA ·asinrodataL15<> + 104(SB)/8, $0.134066870961173521E-01 | 
|  | DATA ·asinrodataL15<> + 112(SB)/8, $-.412335502831898721E-02 | 
|  | DATA ·asinrodataL15<> + 120(SB)/8, $0.867383739532082719E-01 | 
|  | DATA ·asinrodataL15<> + 128(SB)/8, $-.328765950607171649E+00 | 
|  | DATA ·asinrodataL15<> + 136(SB)/8, $0.110401073869414626E+01 | 
|  | DATA ·asinrodataL15<> + 144(SB)/8, $-.270694366992537307E+01 | 
|  | DATA ·asinrodataL15<> + 152(SB)/8, $0.500196500770928669E+01 | 
|  | DATA ·asinrodataL15<> + 160(SB)/8, $-.665866959108585165E+01 | 
|  | DATA ·asinrodataL15<> + 168(SB)/8, $-.344895269334086578E+01 | 
|  | DATA ·asinrodataL15<> + 176(SB)/8, $0.927437952918301659E+00 | 
|  | DATA ·asinrodataL15<> + 184(SB)/8, $0.610487478874645653E+01 | 
|  | DATA ·asinrodataL15<> + 192(SB)/8, $0x7ff8000000000000			//+Inf | 
|  | DATA ·asinrodataL15<> + 200(SB)/8, $-1.0 | 
|  | DATA ·asinrodataL15<> + 208(SB)/8, $1.0 | 
|  | DATA ·asinrodataL15<> + 216(SB)/8, $1.00000000000000000e-20 | 
|  | GLOBL ·asinrodataL15<> + 0(SB), RODATA, $224 | 
|  |  | 
|  | // Asin returns the arcsine, in radians, of the argument. | 
|  | // | 
|  | // Special cases are: | 
|  | //      Asin(±0) = ±0= | 
|  | //      Asin(x) = NaN if x < -1 or x > 1 | 
|  | // The algorithm used is minimax polynomial approximation | 
|  | // with coefficients determined with a Remez exchange algorithm. | 
|  |  | 
|  | TEXT	·asinAsm(SB), NOSPLIT, $0-16 | 
|  | FMOVD	x+0(FP), F0 | 
|  | MOVD	$·asinrodataL15<>+0(SB), R9 | 
|  | LGDR	F0, R7 | 
|  | FMOVD	F0, F8 | 
|  | SRAD	$32, R7 | 
|  | WORD	$0xC0193FE6 //iilf  %r1,1072079005 | 
|  | BYTE	$0xA0 | 
|  | BYTE	$0x9D | 
|  | WORD	$0xB91700C7 //llgtr %r12,%r7 | 
|  | MOVW	R12, R8 | 
|  | MOVW	R1, R6 | 
|  | CMPBGT	R8, R6, L2 | 
|  | WORD	$0xC0193BFF //iilf  %r1,1006632959 | 
|  | BYTE	$0xFF | 
|  | BYTE	$0xFF | 
|  | MOVW	R1, R6 | 
|  | CMPBGT	R8, R6, L13 | 
|  | L3: | 
|  | FMOVD	216(R9), F0 | 
|  | FMADD	F0, F8, F8 | 
|  | L1: | 
|  | FMOVD	F8, ret+8(FP) | 
|  | RET | 
|  | L2: | 
|  | WORD	$0xC0193FEF	//iilf	%r1,1072693247 | 
|  | BYTE	$0xFF | 
|  | BYTE	$0xFF | 
|  | CMPW	R12, R1 | 
|  | BLE	L14 | 
|  | L5: | 
|  | WORD	$0xED0090D0	//cdb	%f0,.L17-.L15(%r9) | 
|  | BYTE	$0x00 | 
|  | BYTE	$0x19 | 
|  | BEQ		L9 | 
|  | WORD	$0xED0090C8	//cdb	%f0,.L18-.L15(%r9) | 
|  | BYTE	$0x00 | 
|  | BYTE	$0x19 | 
|  | BEQ	L10 | 
|  | WFCEDBS	V8, V8, V0 | 
|  | BVS	L1 | 
|  | FMOVD	192(R9), F8 | 
|  | BR	L1 | 
|  | L13: | 
|  | WFMDB	V0, V0, V10 | 
|  | L4: | 
|  | WFMDB	V10, V10, V0 | 
|  | FMOVD	184(R9), F6 | 
|  | FMOVD	176(R9), F2 | 
|  | FMOVD	168(R9), F4 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	160(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	152(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	144(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	136(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | WORD	$0xC0193FE6	//iilf	%r1,1072079005 | 
|  | BYTE	$0xA0 | 
|  | BYTE	$0x9D | 
|  | FMOVD	128(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	120(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	112(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	104(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	96(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	88(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	80(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	72(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	64(R9), F6 | 
|  | WFMADB	V0, V4, V6, V4 | 
|  | FMOVD	56(R9), F6 | 
|  | WFMADB	V0, V2, V6, V2 | 
|  | FMOVD	48(R9), F6 | 
|  | WFMADB	V0, V4, V6, V0 | 
|  | WFMDB	V8, V10, V4 | 
|  | FMADD	F2, F10, F0 | 
|  | FMADD	F0, F4, F8 | 
|  | CMPW	R12, R1 | 
|  | BLE	L1 | 
|  | FMOVD	40(R9), F0 | 
|  | FMADD	F0, F1, F8 | 
|  | FMOVD	F8, ret+8(FP) | 
|  | RET | 
|  | L14: | 
|  | FMOVD	200(R9), F0 | 
|  | FMADD	F8, F8, F0 | 
|  | WORD	$0xB31300A0	//lcdbr	%f10,%f0 | 
|  | WORD	$0xED009020	//cdb	%f0,.L39-.L15(%r9) | 
|  | BYTE	$0x00 | 
|  | BYTE	$0x19 | 
|  | FSQRT	F10, F8 | 
|  | L6: | 
|  | MOVW	R7, R6 | 
|  | CMPBLE	R6, $0, L8 | 
|  | WORD	$0xB3130088	//lcdbr	%f8,%f8 | 
|  | FMOVD	24(R9), F1 | 
|  | BR	L4 | 
|  | L10: | 
|  | FMOVD	16(R9), F8 | 
|  | BR	L1 | 
|  | L9: | 
|  | FMOVD	8(R9), F8 | 
|  | FMOVD	F8, ret+8(FP) | 
|  | RET | 
|  | L8: | 
|  | FMOVD	0(R9), F1 | 
|  | BR	L4 |