...

Text file src/pkg/math/erf_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 ·erfrodataL13<> + 0(SB)/8, $0.243673229298474689E+01
     9	DATA ·erfrodataL13<> + 8(SB)/8, $-.654905018503145600E+00
    10	DATA ·erfrodataL13<> + 16(SB)/8, $0.404669310217538718E+01
    11	DATA ·erfrodataL13<> + 24(SB)/8, $-.564189219162765367E+00
    12	DATA ·erfrodataL13<> + 32(SB)/8, $-.200104300906596851E+01
    13	DATA ·erfrodataL13<> + 40(SB)/8, $0.5
    14	DATA ·erfrodataL13<> + 48(SB)/8, $0.144070097650207154E+00
    15	DATA ·erfrodataL13<> + 56(SB)/8, $-.116697735205906191E+00
    16	DATA ·erfrodataL13<> + 64(SB)/8, $0.256847684882319665E-01
    17	DATA ·erfrodataL13<> + 72(SB)/8, $-.510805169106229148E-02
    18	DATA ·erfrodataL13<> + 80(SB)/8, $0.885258164825590267E-03
    19	DATA ·erfrodataL13<> + 88(SB)/8, $-.133861989591931411E-03
    20	DATA ·erfrodataL13<> + 96(SB)/8, $0.178294867340272534E-04
    21	DATA ·erfrodataL13<> + 104(SB)/8, $-.211436095674019218E-05
    22	DATA ·erfrodataL13<> + 112(SB)/8, $0.225503753499344434E-06
    23	DATA ·erfrodataL13<> + 120(SB)/8, $-.218247939190783624E-07
    24	DATA ·erfrodataL13<> + 128(SB)/8, $0.193179206264594029E-08
    25	DATA ·erfrodataL13<> + 136(SB)/8, $-.157440643541715319E-09
    26	DATA ·erfrodataL13<> + 144(SB)/8, $0.118878583237342616E-10
    27	DATA ·erfrodataL13<> + 152(SB)/8, $0.554289288424588473E-13
    28	DATA ·erfrodataL13<> + 160(SB)/8, $-.277649758489502214E-14
    29	DATA ·erfrodataL13<> + 168(SB)/8, $-.839318416990049443E-12
    30	DATA ·erfrodataL13<> + 176(SB)/8, $-2.25
    31	DATA ·erfrodataL13<> + 184(SB)/8, $.12837916709551258632
    32	DATA ·erfrodataL13<> + 192(SB)/8, $1.0
    33	DATA ·erfrodataL13<> + 200(SB)/8, $0.500000000000004237e+00
    34	DATA ·erfrodataL13<> + 208(SB)/8, $1.0
    35	DATA ·erfrodataL13<> + 216(SB)/8, $0.416666664838056960e-01
    36	DATA ·erfrodataL13<> + 224(SB)/8, $0.166666666630345592e+00
    37	DATA ·erfrodataL13<> + 232(SB)/8, $0.138926439368309441e-02
    38	DATA ·erfrodataL13<> + 240(SB)/8, $0.833349307718286047e-02
    39	DATA ·erfrodataL13<> + 248(SB)/8, $-.693147180559945286e+00
    40	DATA ·erfrodataL13<> + 256(SB)/8, $-.144269504088896339e+01
    41	DATA ·erfrodataL13<> + 264(SB)/8, $281475245147134.9375
    42	DATA ·erfrodataL13<> + 272(SB)/8, $0.358256136398192529E+01
    43	DATA ·erfrodataL13<> + 280(SB)/8, $-.554084396500738270E+00
    44	DATA ·erfrodataL13<> + 288(SB)/8, $0.203630123025312046E+02
    45	DATA ·erfrodataL13<> + 296(SB)/8, $-.735750304705934424E+01
    46	DATA ·erfrodataL13<> + 304(SB)/8, $0.250491598091071797E+02
    47	DATA ·erfrodataL13<> + 312(SB)/8, $-.118955882760959931E+02
    48	DATA ·erfrodataL13<> + 320(SB)/8, $0.942903335085524187E+01
    49	DATA ·erfrodataL13<> + 328(SB)/8, $-.564189522219085689E+00
    50	DATA ·erfrodataL13<> + 336(SB)/8, $-.503767199403555540E+01
    51	DATA ·erfrodataL13<> + 344(SB)/8, $0xbbc79ca10c924223
    52	DATA ·erfrodataL13<> + 352(SB)/8, $0.004099975562609307E+01
    53	DATA ·erfrodataL13<> + 360(SB)/8, $-.324434353381296556E+00
    54	DATA ·erfrodataL13<> + 368(SB)/8, $0.945204812084476250E-01
    55	DATA ·erfrodataL13<> + 376(SB)/8, $-.221407443830058214E-01
    56	DATA ·erfrodataL13<> + 384(SB)/8, $0.426072376238804349E-02
    57	DATA ·erfrodataL13<> + 392(SB)/8, $-.692229229127016977E-03
    58	DATA ·erfrodataL13<> + 400(SB)/8, $0.971111253652087188E-04
    59	DATA ·erfrodataL13<> + 408(SB)/8, $-.119752226272050504E-04
    60	DATA ·erfrodataL13<> + 416(SB)/8, $0.131662993588532278E-05
    61	DATA ·erfrodataL13<> + 424(SB)/8, $0.115776482315851236E-07
    62	DATA ·erfrodataL13<> + 432(SB)/8, $-.780118522218151687E-09
    63	DATA ·erfrodataL13<> + 440(SB)/8, $-.130465975877241088E-06
    64	DATA ·erfrodataL13<> + 448(SB)/8, $-0.25
    65	GLOBL ·erfrodataL13<> + 0(SB), RODATA, $456
    66	
    67	// Table of log correction terms
    68	DATA ·erftab2066<> + 0(SB)/8, $0.442737824274138381e-01
    69	DATA ·erftab2066<> + 8(SB)/8, $0.263602189790660309e-01
    70	DATA ·erftab2066<> + 16(SB)/8, $0.122565642281703586e-01
    71	DATA ·erftab2066<> + 24(SB)/8, $0.143757052860721398e-02
    72	DATA ·erftab2066<> + 32(SB)/8, $-.651375034121276075e-02
    73	DATA ·erftab2066<> + 40(SB)/8, $-.119317678849450159e-01
    74	DATA ·erftab2066<> + 48(SB)/8, $-.150868749549871069e-01
    75	DATA ·erftab2066<> + 56(SB)/8, $-.161992609578469234e-01
    76	DATA ·erftab2066<> + 64(SB)/8, $-.154492360403337917e-01
    77	DATA ·erftab2066<> + 72(SB)/8, $-.129850717389178721e-01
    78	DATA ·erftab2066<> + 80(SB)/8, $-.892902649276657891e-02
    79	DATA ·erftab2066<> + 88(SB)/8, $-.338202636596794887e-02
    80	DATA ·erftab2066<> + 96(SB)/8, $0.357266307045684762e-02
    81	DATA ·erftab2066<> + 104(SB)/8, $0.118665304327406698e-01
    82	DATA ·erftab2066<> + 112(SB)/8, $0.214434994118118914e-01
    83	DATA ·erftab2066<> + 120(SB)/8, $0.322580645161290314e-01
    84	GLOBL ·erftab2066<> + 0(SB), RODATA, $128
    85	
    86	// Table of +/- 1.0
    87	DATA ·erftab12067<> + 0(SB)/8, $1.0
    88	DATA ·erftab12067<> + 8(SB)/8, $-1.0
    89	GLOBL ·erftab12067<> + 0(SB), RODATA, $16
    90	
    91	// Erf returns the error function of the argument.
    92	//
    93	// Special cases are:
    94	//      Erf(+Inf) = 1
    95	//      Erf(-Inf) = -1
    96	//      Erf(NaN) = NaN
    97	// The algorithm used is minimax polynomial approximation
    98	// with coefficients determined with a Remez exchange algorithm.
    99	
   100	TEXT	·erfAsm(SB), NOSPLIT, $0-16
   101		FMOVD	x+0(FP), F0
   102		MOVD	$·erfrodataL13<>+0(SB), R5
   103		LGDR	F0, R1
   104		FMOVD	F0, F6
   105		SRAD	$48, R1
   106		MOVH	$16383, R3
   107		RISBGZ	$49, $63, $0, R1, R2
   108		MOVW	R2, R6
   109		MOVW	R3, R7
   110		CMPBGT	R6, R7, L2
   111		MOVH	$12287, R1
   112		MOVW	R1, R7
   113		CMPBLE	R6, R7 ,L12
   114		MOVH	$16367, R1
   115		MOVW	R1, R7
   116		CMPBGT	R6, R7, L5
   117		FMOVD	448(R5), F4
   118		FMADD	F0, F0, F4
   119		FMOVD	440(R5), F3
   120		WFMDB	V4, V4, V2
   121		FMOVD	432(R5), F0
   122		FMOVD	424(R5), F1
   123		WFMADB	V2, V0, V3, V0
   124		FMOVD	416(R5), F3
   125		WFMADB	V2, V1, V3, V1
   126		FMOVD	408(R5), F5
   127		FMOVD	400(R5), F3
   128		WFMADB	V2, V0, V5, V0
   129		WFMADB	V2, V1, V3, V1
   130		FMOVD	392(R5), F5
   131		FMOVD	384(R5), F3
   132		WFMADB	V2, V0, V5, V0
   133		WFMADB	V2, V1, V3, V1
   134		FMOVD	376(R5), F5
   135		FMOVD	368(R5), F3
   136		WFMADB	V2, V0, V5, V0
   137		WFMADB	V2, V1, V3, V1
   138		FMOVD	360(R5), F5
   139		FMOVD	352(R5), F3
   140		WFMADB	V2, V0, V5, V0
   141		WFMADB	V2, V1, V3, V2
   142		WFMADB	V4, V0, V2, V0
   143		WFMADB	V6, V0, V6, V0
   144	L1:
   145		FMOVD	F0, ret+8(FP)
   146		RET
   147	L2:
   148		MOVH	R1, R1
   149		MOVH	$16407, R3
   150		SRW	$31, R1, R1
   151		MOVW	R2, R6
   152		MOVW	R3, R7
   153		CMPBLE	R6, R7, L6
   154		MOVW	R1, R1
   155		SLD	$3, R1, R1
   156		MOVD	$·erftab12067<>+0(SB), R3
   157		WORD    $0x68013000     //ld %f0,0(%r1,%r3)
   158		MOVH	$32751, R1
   159		MOVW	R1, R7
   160		CMPBGT	R6, R7, L7
   161		FMOVD	344(R5), F2
   162		FMADD	F2, F0, F0
   163	L7:
   164		WFCEDBS	V6, V6, V2
   165		BEQ	L1
   166		FMOVD	F6, F0
   167		FMOVD	F0, ret+8(FP)
   168		RET
   169	
   170	L6:
   171		MOVW	R1, R1
   172		SLD	$3, R1, R1
   173		MOVD	$·erftab12067<>+0(SB), R4
   174		WFMDB	V0, V0, V1
   175		MOVH	$0x0, R3
   176		WORD    $0x68014000     //ld %f0,0(%r1,%r4)
   177		MOVH	$16399, R1
   178		MOVW	R2, R6
   179		MOVW	R1, R7
   180		CMPBGT	R6, R7, L8
   181		FMOVD	336(R5), F3
   182		FMOVD	328(R5), F2
   183		FMOVD	F1, F4
   184		WFMADB	V1, V2, V3, V2
   185		WORD	$0xED405140	//adb %f4,.L30-.L13(%r5)
   186		BYTE	$0x00
   187		BYTE	$0x1A
   188		FMOVD	312(R5), F3
   189		WFMADB	V1, V2, V3, V2
   190		FMOVD	304(R5), F3
   191		WFMADB	V1, V4, V3, V4
   192		FMOVD	296(R5), F3
   193		WFMADB	V1, V2, V3, V2
   194		FMOVD	288(R5), F3
   195		WFMADB	V1, V4, V3, V4
   196		FMOVD	280(R5), F3
   197		WFMADB	V1, V2, V3, V2
   198		FMOVD	272(R5), F3
   199		WFMADB	V1, V4, V3, V4
   200	L9:
   201		FMOVD	264(R5), F3
   202		FMUL	F4, F6
   203		FMOVD	256(R5), F4
   204		WFMADB	V1, V4, V3, V4
   205		FDIV	F6, F2
   206		LGDR	F4, R1
   207		FSUB	F3, F4
   208		FMOVD	248(R5), F6
   209		WFMSDB	V4, V6, V1, V4
   210		FMOVD	240(R5), F1
   211		FMOVD	232(R5), F6
   212		WFMADB	V4, V6, V1, V6
   213		FMOVD	224(R5), F1
   214		FMOVD	216(R5), F3
   215		WFMADB	V4, V3, V1, V3
   216		WFMDB	V4, V4, V1
   217		FMOVD	208(R5), F5
   218		WFMADB	V6, V1, V3, V6
   219		FMOVD	200(R5), F3
   220		MOVH	R1,R1
   221		WFMADB	V4, V3, V5, V3
   222		RISBGZ	$57, $60, $3, R1, R2
   223		WFMADB	V1, V6, V3, V6
   224		RISBGN	$0, $15, $48, R1, R3
   225		MOVD	$·erftab2066<>+0(SB), R1
   226		FMOVD	192(R5), F1
   227		LDGR	R3, F3
   228		WORD	$0xED221000	//madb %f2,%f2,0(%r2,%r1)
   229		BYTE	$0x20
   230		BYTE	$0x1E
   231		WFMADB	V4, V6, V1, V4
   232		FMUL	F3, F2
   233		FMADD	F4, F2, F0
   234		FMOVD	F0, ret+8(FP)
   235		RET
   236	L12:
   237		FMOVD	184(R5), F0
   238		WFMADB	V6, V0, V6, V0
   239		FMOVD	F0, ret+8(FP)
   240		RET
   241	L5:
   242		FMOVD	176(R5), F1
   243		FMADD	F0, F0, F1
   244		FMOVD	168(R5), F3
   245		WFMDB	V1, V1, V2
   246		FMOVD	160(R5), F0
   247		FMOVD	152(R5), F4
   248		WFMADB	V2, V0, V3, V0
   249		FMOVD	144(R5), F3
   250		WFMADB	V2, V4, V3, V4
   251		FMOVD	136(R5), F5
   252		FMOVD	128(R5), F3
   253		WFMADB	V2, V0, V5, V0
   254		WFMADB	V2, V4, V3, V4
   255		FMOVD	120(R5), F5
   256		FMOVD	112(R5), F3
   257		WFMADB	V2, V0, V5, V0
   258		WFMADB	V2, V4, V3, V4
   259		FMOVD	104(R5), F5
   260		FMOVD	96(R5), F3
   261		WFMADB	V2, V0, V5, V0
   262		WFMADB	V2, V4, V3, V4
   263		FMOVD	88(R5), F5
   264		FMOVD	80(R5), F3
   265		WFMADB	V2, V0, V5, V0
   266		WFMADB	V2, V4, V3, V4
   267		FMOVD	72(R5), F5
   268		FMOVD	64(R5), F3
   269		WFMADB	V2, V0, V5, V0
   270		WFMADB	V2, V4, V3, V4
   271		FMOVD	56(R5), F5
   272		FMOVD	48(R5), F3
   273		WFMADB	V2, V0, V5, V0
   274		WFMADB	V2, V4, V3, V2
   275		FMOVD	40(R5), F4
   276		WFMADB	V1, V0, V2, V0
   277		FMUL	F6, F0
   278		FMADD	F4, F6, F0
   279		FMOVD	F0, ret+8(FP)
   280		RET
   281	L8:
   282		FMOVD	32(R5), F3
   283		FMOVD	24(R5), F2
   284		FMOVD	F1, F4
   285		WFMADB	V1, V2, V3, V2
   286		WORD	$0xED405010	//adb %f4,.L68-.L13(%r5)
   287		BYTE	$0x00
   288		BYTE	$0x1A
   289		FMOVD	8(R5), F3
   290		WFMADB	V1, V2, V3, V2
   291		FMOVD	·erfrodataL13<>+0(SB), F3
   292		WFMADB	V1, V4, V3, V4
   293		BR	L9

View as plain text