acos_s390x.s raw

   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  	LCDBR	F0, F8
 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  	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
 145