| // 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 ·erfrodataL13<> + 0(SB)/8, $0.243673229298474689E+01 | 
 | DATA ·erfrodataL13<> + 8(SB)/8, $-.654905018503145600E+00 | 
 | DATA ·erfrodataL13<> + 16(SB)/8, $0.404669310217538718E+01 | 
 | DATA ·erfrodataL13<> + 24(SB)/8, $-.564189219162765367E+00 | 
 | DATA ·erfrodataL13<> + 32(SB)/8, $-.200104300906596851E+01 | 
 | DATA ·erfrodataL13<> + 40(SB)/8, $0.5 | 
 | DATA ·erfrodataL13<> + 48(SB)/8, $0.144070097650207154E+00 | 
 | DATA ·erfrodataL13<> + 56(SB)/8, $-.116697735205906191E+00 | 
 | DATA ·erfrodataL13<> + 64(SB)/8, $0.256847684882319665E-01 | 
 | DATA ·erfrodataL13<> + 72(SB)/8, $-.510805169106229148E-02 | 
 | DATA ·erfrodataL13<> + 80(SB)/8, $0.885258164825590267E-03 | 
 | DATA ·erfrodataL13<> + 88(SB)/8, $-.133861989591931411E-03 | 
 | DATA ·erfrodataL13<> + 96(SB)/8, $0.178294867340272534E-04 | 
 | DATA ·erfrodataL13<> + 104(SB)/8, $-.211436095674019218E-05 | 
 | DATA ·erfrodataL13<> + 112(SB)/8, $0.225503753499344434E-06 | 
 | DATA ·erfrodataL13<> + 120(SB)/8, $-.218247939190783624E-07 | 
 | DATA ·erfrodataL13<> + 128(SB)/8, $0.193179206264594029E-08 | 
 | DATA ·erfrodataL13<> + 136(SB)/8, $-.157440643541715319E-09 | 
 | DATA ·erfrodataL13<> + 144(SB)/8, $0.118878583237342616E-10 | 
 | DATA ·erfrodataL13<> + 152(SB)/8, $0.554289288424588473E-13 | 
 | DATA ·erfrodataL13<> + 160(SB)/8, $-.277649758489502214E-14 | 
 | DATA ·erfrodataL13<> + 168(SB)/8, $-.839318416990049443E-12 | 
 | DATA ·erfrodataL13<> + 176(SB)/8, $-2.25 | 
 | DATA ·erfrodataL13<> + 184(SB)/8, $.12837916709551258632 | 
 | DATA ·erfrodataL13<> + 192(SB)/8, $1.0 | 
 | DATA ·erfrodataL13<> + 200(SB)/8, $0.500000000000004237e+00 | 
 | DATA ·erfrodataL13<> + 208(SB)/8, $1.0 | 
 | DATA ·erfrodataL13<> + 216(SB)/8, $0.416666664838056960e-01 | 
 | DATA ·erfrodataL13<> + 224(SB)/8, $0.166666666630345592e+00 | 
 | DATA ·erfrodataL13<> + 232(SB)/8, $0.138926439368309441e-02 | 
 | DATA ·erfrodataL13<> + 240(SB)/8, $0.833349307718286047e-02 | 
 | DATA ·erfrodataL13<> + 248(SB)/8, $-.693147180559945286e+00 | 
 | DATA ·erfrodataL13<> + 256(SB)/8, $-.144269504088896339e+01 | 
 | DATA ·erfrodataL13<> + 264(SB)/8, $281475245147134.9375 | 
 | DATA ·erfrodataL13<> + 272(SB)/8, $0.358256136398192529E+01 | 
 | DATA ·erfrodataL13<> + 280(SB)/8, $-.554084396500738270E+00 | 
 | DATA ·erfrodataL13<> + 288(SB)/8, $0.203630123025312046E+02 | 
 | DATA ·erfrodataL13<> + 296(SB)/8, $-.735750304705934424E+01 | 
 | DATA ·erfrodataL13<> + 304(SB)/8, $0.250491598091071797E+02 | 
 | DATA ·erfrodataL13<> + 312(SB)/8, $-.118955882760959931E+02 | 
 | DATA ·erfrodataL13<> + 320(SB)/8, $0.942903335085524187E+01 | 
 | DATA ·erfrodataL13<> + 328(SB)/8, $-.564189522219085689E+00 | 
 | DATA ·erfrodataL13<> + 336(SB)/8, $-.503767199403555540E+01 | 
 | DATA ·erfrodataL13<> + 344(SB)/8, $0xbbc79ca10c924223 | 
 | DATA ·erfrodataL13<> + 352(SB)/8, $0.004099975562609307E+01 | 
 | DATA ·erfrodataL13<> + 360(SB)/8, $-.324434353381296556E+00 | 
 | DATA ·erfrodataL13<> + 368(SB)/8, $0.945204812084476250E-01 | 
 | DATA ·erfrodataL13<> + 376(SB)/8, $-.221407443830058214E-01 | 
 | DATA ·erfrodataL13<> + 384(SB)/8, $0.426072376238804349E-02 | 
 | DATA ·erfrodataL13<> + 392(SB)/8, $-.692229229127016977E-03 | 
 | DATA ·erfrodataL13<> + 400(SB)/8, $0.971111253652087188E-04 | 
 | DATA ·erfrodataL13<> + 408(SB)/8, $-.119752226272050504E-04 | 
 | DATA ·erfrodataL13<> + 416(SB)/8, $0.131662993588532278E-05 | 
 | DATA ·erfrodataL13<> + 424(SB)/8, $0.115776482315851236E-07 | 
 | DATA ·erfrodataL13<> + 432(SB)/8, $-.780118522218151687E-09 | 
 | DATA ·erfrodataL13<> + 440(SB)/8, $-.130465975877241088E-06 | 
 | DATA ·erfrodataL13<> + 448(SB)/8, $-0.25 | 
 | GLOBL ·erfrodataL13<> + 0(SB), RODATA, $456 | 
 |  | 
 | // Table of log correction terms | 
 | DATA ·erftab2066<> + 0(SB)/8, $0.442737824274138381e-01 | 
 | DATA ·erftab2066<> + 8(SB)/8, $0.263602189790660309e-01 | 
 | DATA ·erftab2066<> + 16(SB)/8, $0.122565642281703586e-01 | 
 | DATA ·erftab2066<> + 24(SB)/8, $0.143757052860721398e-02 | 
 | DATA ·erftab2066<> + 32(SB)/8, $-.651375034121276075e-02 | 
 | DATA ·erftab2066<> + 40(SB)/8, $-.119317678849450159e-01 | 
 | DATA ·erftab2066<> + 48(SB)/8, $-.150868749549871069e-01 | 
 | DATA ·erftab2066<> + 56(SB)/8, $-.161992609578469234e-01 | 
 | DATA ·erftab2066<> + 64(SB)/8, $-.154492360403337917e-01 | 
 | DATA ·erftab2066<> + 72(SB)/8, $-.129850717389178721e-01 | 
 | DATA ·erftab2066<> + 80(SB)/8, $-.892902649276657891e-02 | 
 | DATA ·erftab2066<> + 88(SB)/8, $-.338202636596794887e-02 | 
 | DATA ·erftab2066<> + 96(SB)/8, $0.357266307045684762e-02 | 
 | DATA ·erftab2066<> + 104(SB)/8, $0.118665304327406698e-01 | 
 | DATA ·erftab2066<> + 112(SB)/8, $0.214434994118118914e-01 | 
 | DATA ·erftab2066<> + 120(SB)/8, $0.322580645161290314e-01 | 
 | GLOBL ·erftab2066<> + 0(SB), RODATA, $128 | 
 |  | 
 | // Table of +/- 1.0 | 
 | DATA ·erftab12067<> + 0(SB)/8, $1.0 | 
 | DATA ·erftab12067<> + 8(SB)/8, $-1.0 | 
 | GLOBL ·erftab12067<> + 0(SB), RODATA, $16 | 
 |  | 
 | // Erf returns the error function of the argument. | 
 | // | 
 | // Special cases are: | 
 | //      Erf(+Inf) = 1 | 
 | //      Erf(-Inf) = -1 | 
 | //      Erf(NaN) = NaN | 
 | // The algorithm used is minimax polynomial approximation | 
 | // with coefficients determined with a Remez exchange algorithm. | 
 |  | 
 | TEXT	·erfAsm(SB), NOSPLIT, $0-16 | 
 | 	FMOVD	x+0(FP), F0 | 
 | 	MOVD	$·erfrodataL13<>+0(SB), R5 | 
 | 	LGDR	F0, R1 | 
 | 	FMOVD	F0, F6 | 
 | 	SRAD	$48, R1 | 
 | 	MOVH	$16383, R3 | 
 | 	RISBGZ	$49, $63, $0, R1, R2 | 
 | 	MOVW	R2, R6 | 
 | 	MOVW	R3, R7 | 
 | 	CMPBGT	R6, R7, L2 | 
 | 	MOVH	$12287, R1 | 
 | 	MOVW	R1, R7 | 
 | 	CMPBLE	R6, R7 ,L12 | 
 | 	MOVH	$16367, R1 | 
 | 	MOVW	R1, R7 | 
 | 	CMPBGT	R6, R7, L5 | 
 | 	FMOVD	448(R5), F4 | 
 | 	FMADD	F0, F0, F4 | 
 | 	FMOVD	440(R5), F3 | 
 | 	WFMDB	V4, V4, V2 | 
 | 	FMOVD	432(R5), F0 | 
 | 	FMOVD	424(R5), F1 | 
 | 	WFMADB	V2, V0, V3, V0 | 
 | 	FMOVD	416(R5), F3 | 
 | 	WFMADB	V2, V1, V3, V1 | 
 | 	FMOVD	408(R5), F5 | 
 | 	FMOVD	400(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V1, V3, V1 | 
 | 	FMOVD	392(R5), F5 | 
 | 	FMOVD	384(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V1, V3, V1 | 
 | 	FMOVD	376(R5), F5 | 
 | 	FMOVD	368(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V1, V3, V1 | 
 | 	FMOVD	360(R5), F5 | 
 | 	FMOVD	352(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V1, V3, V2 | 
 | 	WFMADB	V4, V0, V2, V0 | 
 | 	WFMADB	V6, V0, V6, V0 | 
 | L1: | 
 | 	FMOVD	F0, ret+8(FP) | 
 | 	RET | 
 | L2: | 
 | 	MOVH	R1, R1 | 
 | 	MOVH	$16407, R3 | 
 | 	SRW	$31, R1, R1 | 
 | 	MOVW	R2, R6 | 
 | 	MOVW	R3, R7 | 
 | 	CMPBLE	R6, R7, L6 | 
 | 	MOVW	R1, R1 | 
 | 	SLD	$3, R1, R1 | 
 | 	MOVD	$·erftab12067<>+0(SB), R3 | 
 | 	WORD    $0x68013000     //ld %f0,0(%r1,%r3) | 
 | 	MOVH	$32751, R1 | 
 | 	MOVW	R1, R7 | 
 | 	CMPBGT	R6, R7, L7 | 
 | 	FMOVD	344(R5), F2 | 
 | 	FMADD	F2, F0, F0 | 
 | L7: | 
 | 	WFCEDBS	V6, V6, V2 | 
 | 	BEQ	L1 | 
 | 	FMOVD	F6, F0 | 
 | 	FMOVD	F0, ret+8(FP) | 
 | 	RET | 
 |  | 
 | L6: | 
 | 	MOVW	R1, R1 | 
 | 	SLD	$3, R1, R1 | 
 | 	MOVD	$·erftab12067<>+0(SB), R4 | 
 | 	WFMDB	V0, V0, V1 | 
 | 	MOVH	$0x0, R3 | 
 | 	WORD    $0x68014000     //ld %f0,0(%r1,%r4) | 
 | 	MOVH	$16399, R1 | 
 | 	MOVW	R2, R6 | 
 | 	MOVW	R1, R7 | 
 | 	CMPBGT	R6, R7, L8 | 
 | 	FMOVD	336(R5), F3 | 
 | 	FMOVD	328(R5), F2 | 
 | 	FMOVD	F1, F4 | 
 | 	WFMADB	V1, V2, V3, V2 | 
 | 	WORD	$0xED405140	//adb %f4,.L30-.L13(%r5) | 
 | 	BYTE	$0x00 | 
 | 	BYTE	$0x1A | 
 | 	FMOVD	312(R5), F3 | 
 | 	WFMADB	V1, V2, V3, V2 | 
 | 	FMOVD	304(R5), F3 | 
 | 	WFMADB	V1, V4, V3, V4 | 
 | 	FMOVD	296(R5), F3 | 
 | 	WFMADB	V1, V2, V3, V2 | 
 | 	FMOVD	288(R5), F3 | 
 | 	WFMADB	V1, V4, V3, V4 | 
 | 	FMOVD	280(R5), F3 | 
 | 	WFMADB	V1, V2, V3, V2 | 
 | 	FMOVD	272(R5), F3 | 
 | 	WFMADB	V1, V4, V3, V4 | 
 | L9: | 
 | 	FMOVD	264(R5), F3 | 
 | 	FMUL	F4, F6 | 
 | 	FMOVD	256(R5), F4 | 
 | 	WFMADB	V1, V4, V3, V4 | 
 | 	FDIV	F6, F2 | 
 | 	LGDR	F4, R1 | 
 | 	FSUB	F3, F4 | 
 | 	FMOVD	248(R5), F6 | 
 | 	WFMSDB	V4, V6, V1, V4 | 
 | 	FMOVD	240(R5), F1 | 
 | 	FMOVD	232(R5), F6 | 
 | 	WFMADB	V4, V6, V1, V6 | 
 | 	FMOVD	224(R5), F1 | 
 | 	FMOVD	216(R5), F3 | 
 | 	WFMADB	V4, V3, V1, V3 | 
 | 	WFMDB	V4, V4, V1 | 
 | 	FMOVD	208(R5), F5 | 
 | 	WFMADB	V6, V1, V3, V6 | 
 | 	FMOVD	200(R5), F3 | 
 | 	MOVH	R1,R1 | 
 | 	WFMADB	V4, V3, V5, V3 | 
 | 	RISBGZ	$57, $60, $3, R1, R2 | 
 | 	WFMADB	V1, V6, V3, V6 | 
 | 	RISBGN	$0, $15, $48, R1, R3 | 
 | 	MOVD	$·erftab2066<>+0(SB), R1 | 
 | 	FMOVD	192(R5), F1 | 
 | 	LDGR	R3, F3 | 
 | 	WORD	$0xED221000	//madb %f2,%f2,0(%r2,%r1) | 
 | 	BYTE	$0x20 | 
 | 	BYTE	$0x1E | 
 | 	WFMADB	V4, V6, V1, V4 | 
 | 	FMUL	F3, F2 | 
 | 	FMADD	F4, F2, F0 | 
 | 	FMOVD	F0, ret+8(FP) | 
 | 	RET | 
 | L12: | 
 | 	FMOVD	184(R5), F0 | 
 | 	WFMADB	V6, V0, V6, V0 | 
 | 	FMOVD	F0, ret+8(FP) | 
 | 	RET | 
 | L5: | 
 | 	FMOVD	176(R5), F1 | 
 | 	FMADD	F0, F0, F1 | 
 | 	FMOVD	168(R5), F3 | 
 | 	WFMDB	V1, V1, V2 | 
 | 	FMOVD	160(R5), F0 | 
 | 	FMOVD	152(R5), F4 | 
 | 	WFMADB	V2, V0, V3, V0 | 
 | 	FMOVD	144(R5), F3 | 
 | 	WFMADB	V2, V4, V3, V4 | 
 | 	FMOVD	136(R5), F5 | 
 | 	FMOVD	128(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V4, V3, V4 | 
 | 	FMOVD	120(R5), F5 | 
 | 	FMOVD	112(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V4, V3, V4 | 
 | 	FMOVD	104(R5), F5 | 
 | 	FMOVD	96(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V4, V3, V4 | 
 | 	FMOVD	88(R5), F5 | 
 | 	FMOVD	80(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V4, V3, V4 | 
 | 	FMOVD	72(R5), F5 | 
 | 	FMOVD	64(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V4, V3, V4 | 
 | 	FMOVD	56(R5), F5 | 
 | 	FMOVD	48(R5), F3 | 
 | 	WFMADB	V2, V0, V5, V0 | 
 | 	WFMADB	V2, V4, V3, V2 | 
 | 	FMOVD	40(R5), F4 | 
 | 	WFMADB	V1, V0, V2, V0 | 
 | 	FMUL	F6, F0 | 
 | 	FMADD	F4, F6, F0 | 
 | 	FMOVD	F0, ret+8(FP) | 
 | 	RET | 
 | L8: | 
 | 	FMOVD	32(R5), F3 | 
 | 	FMOVD	24(R5), F2 | 
 | 	FMOVD	F1, F4 | 
 | 	WFMADB	V1, V2, V3, V2 | 
 | 	WORD	$0xED405010	//adb %f4,.L68-.L13(%r5) | 
 | 	BYTE	$0x00 | 
 | 	BYTE	$0x1A | 
 | 	FMOVD	8(R5), F3 | 
 | 	WFMADB	V1, V2, V3, V2 | 
 | 	FMOVD	·erfrodataL13<>+0(SB), F3 | 
 | 	WFMADB	V1, V4, V3, V4 | 
 | 	BR	L9 |