$65 GRAYBYTE WORDPRESS FILE MANAGER $71

SERVER : vnpttt-amd7f72-h1.vietnix.vn #1 SMP Fri May 24 12:42:50 UTC 2024
SERVER IP : 103.200.23.149 | ADMIN IP 216.73.216.22
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/lib/golang/src/math/

HOME
Current File : /lib/golang/src/math//exp_loong64.s
// Copyright 2025 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"

#define NearZero	0x3e30000000000000	// 2**-28
#define PosInf		0x7ff0000000000000
#define FracMask	0x000fffffffffffff
#define C1		0x3cb0000000000000	// 2**-52

DATA exprodata<>+0(SB)/8, $0.0
DATA exprodata<>+8(SB)/8, $0.5
DATA exprodata<>+16(SB)/8, $1.0
DATA exprodata<>+24(SB)/8, $2.0
DATA exprodata<>+32(SB)/8, $6.93147180369123816490e-01	// Ln2Hi
DATA exprodata<>+40(SB)/8, $1.90821492927058770002e-10	// Ln2Lo
DATA exprodata<>+48(SB)/8, $1.44269504088896338700e+00	// Log2e
DATA exprodata<>+56(SB)/8, $7.09782712893383973096e+02	// Overflow
DATA exprodata<>+64(SB)/8, $-7.45133219101941108420e+02	// Underflow
DATA exprodata<>+72(SB)/8, $1.0239999999999999e+03	// Overflow2
DATA exprodata<>+80(SB)/8, $-1.0740e+03			// Underflow2
DATA exprodata<>+88(SB)/8, $3.7252902984619141e-09	// NearZero
GLOBL exprodata<>+0(SB), NOPTR|RODATA, $96

DATA expmultirodata<>+0(SB)/8, $1.66666666666666657415e-01	// P1
DATA expmultirodata<>+8(SB)/8, $-2.77777777770155933842e-03	// P2
DATA expmultirodata<>+16(SB)/8, $6.61375632143793436117e-05	// P3
DATA expmultirodata<>+24(SB)/8, $-1.65339022054652515390e-06	// P4
DATA expmultirodata<>+32(SB)/8, $4.13813679705723846039e-08	// P5
GLOBL expmultirodata<>+0(SB), NOPTR|RODATA, $40

// Exp returns e**x, the base-e exponential of x.
// This is an assembly implementation of the method used for function Exp in file exp.go.
//
// func Exp(x float64) float64
TEXT ·archExp(SB),$0-16
	MOVD	x+0(FP), F0	// F0 = x

	MOVV	$exprodata<>+0(SB), R10
	MOVD	56(R10), F1	// Overflow
	MOVD	64(R10), F2	// Underflow
	MOVD	88(R10), F3	// NearZero
	MOVD	16(R10), F17	// 1.0

	CMPEQD	F0, F0, FCC0
	BFPF	isNaN		// x = NaN, return NaN

	CMPGTD	F0, F1, FCC0
	BFPT	overflow	// x > Overflow, return PosInf

	CMPGTD	F2, F0, FCC0
	BFPT	underflow	// x < Underflow, return 0

	ABSD	F0, F5
	CMPGTD	F3, F5, FCC0
	BFPT	nearzero	// fabs(x) < NearZero, return 1 + x

	// argument reduction, x = k*ln2 + r,  |r| <= 0.5*ln2
	// computed as r = hi - lo for extra precision.
	MOVD	0(R10), F5
	MOVD	8(R10), F3
	MOVD	48(R10), F2
	CMPGTD	F0, F5, FCC0
	BFPT	add		// x > 0
sub:
	FMSUBD	F3, F2, F0, F3	// Log2e*x - 0.5
	JMP	2(PC)
add:
	FMADDD	F3, F2, F0, F3	// Log2e*x + 0.5

	FTINTRZVD F3, F4	// float64 -> int64
	MOVV	F4, R5		// R5 = int(k)
	FFINTDV	F4, F3		// int64 -> float64

	MOVD	32(R10), F4
	MOVD	40(R10), F5
	FNMSUBD	F0, F3, F4, F4
	MULD	F3, F5, F5
	SUBD	F5, F4, F6
	MULD	F6, F6, F7

	// compute c
	MOVV	$expmultirodata<>+0(SB), R11
	MOVD	32(R11), F8
	MOVD	24(R11), F9
	FMADDD	F9, F8, F7, F13
	MOVD	16(R11), F10
	FMADDD	F10, F13, F7, F13
	MOVD	8(R11), F11
	FMADDD	F11, F13, F7, F13
	MOVD	0(R11), F12
	FMADDD	F12, F13, F7, F13
	FNMSUBD	F6, F13, F7, F13

	// compute y
	MOVD	24(R10), F14
	SUBD	F13, F14, F14
	MULD	F6, F13, F15
	DIVD	F14, F15, F15
	SUBD	F15, F5, F15
	SUBD	F4, F15, F15
	SUBD	F15, F17, F16

	// inline Ldexp(y, k), benefit:
	// 1, no parameter pass overhead.
	// 2, skip unnecessary checks for Inf/NaN/Zero
	MOVV	F16, R4
	MOVV	$FracMask, R9
	AND	R9, R4, R6	// fraction
	SRLV	$52, R4, R7	// exponent
	ADDV	R5, R7
	MOVV	$1, R12
	BGE	R7, R12, normal
	ADDV	$52, R7		// denormal
	MOVV	$C1, R8
	MOVV	R8, F17
normal:
	SLLV	$52, R7
	OR	R7, R6, R4
	MOVV	R4, F0
	MULD	F17, F0		// return m * x
	MOVD	F0, ret+8(FP)
	RET
nearzero:
	ADDD	F17, F0, F0
isNaN:
	MOVD	F0, ret+8(FP)
	RET
underflow:
	MOVV	R0, ret+8(FP)
	RET
overflow:
	MOVV	$PosInf, R4
	MOVV	R4, ret+8(FP)
	RET


// Exp2 returns 2**x, the base-2 exponential of x.
// This is an assembly implementation of the method used for function Exp2 in file exp.go.
//
// func Exp2(x float64) float64
TEXT ·archExp2(SB),$0-16
	MOVD	x+0(FP), F0	// F0 = x

	MOVV	$exprodata<>+0(SB), R10
	MOVD	72(R10), F1	// Overflow2
	MOVD	80(R10), F2	// Underflow2
	MOVD	88(R10), F3	// NearZero

	CMPEQD	F0, F0, FCC0
	BFPF	isNaN		// x = NaN, return NaN

	CMPGTD	F0, F1, FCC0
	BFPT	overflow	// x > Overflow, return PosInf

	CMPGTD	F2, F0, FCC0
	BFPT	underflow	// x < Underflow, return 0

	// argument reduction; x = r*lg(e) + k with |r| <= ln(2)/2
	// computed as r = hi - lo for extra precision.
	MOVD	0(R10), F10
	MOVD	8(R10), F2
	CMPGTD	F0, F10, FCC0
	BFPT	add
sub:
	SUBD	F2, F0, F3	// x - 0.5
	JMP	2(PC)
add:
	ADDD	F2, F0, F3	// x + 0.5

	FTINTRZVD F3, F4
	MOVV	F4, R5
	FFINTDV	F4, F3

	MOVD	32(R10), F4
	MOVD	40(R10), F5
	SUBD	F3, F0, F3
	MULD	F3, F4
	FNMSUBD	F10, F3, F5, F5
	SUBD	F5, F4, F6
	MULD	F6, F6, F7

	// compute c
	MOVV	$expmultirodata<>+0(SB), R11
	MOVD	32(R11), F8
	MOVD	24(R11), F9
	FMADDD	F9, F8, F7, F13
	MOVD	16(R11), F10
	FMADDD	F10, F13, F7, F13
	MOVD	8(R11), F11
	FMADDD	F11, F13, F7, F13
	MOVD	0(R11), F12
	FMADDD	F12, F13, F7, F13
	FNMSUBD	F6, F13, F7, F13

	// compute y
	MOVD	24(R10), F14
	SUBD	F13, F14, F14
	MULD	F6, F13, F15
	DIVD	F14, F15

	MOVD	16(R10), F17
	SUBD	F15, F5, F15
	SUBD	F4, F15, F15
	SUBD	F15, F17, F16

	// inline Ldexp(y, k), benefit:
	// 1, no parameter pass overhead.
	// 2, skip unnecessary checks for Inf/NaN/Zero
	MOVV	F16, R4
	MOVV	$FracMask, R9
	SRLV	$52, R4, R7	// exponent
	AND	R9, R4, R6	// fraction
	ADDV	R5, R7
	MOVV	$1, R12
	BGE	R7, R12, normal

	ADDV	$52, R7		// denormal
	MOVV	$C1, R8
	MOVV	R8, F17
normal:
	SLLV	$52, R7
	OR	R7, R6, R4
	MOVV	R4, F0
	MULD	F17, F0
isNaN:
	MOVD	F0, ret+8(FP)
	RET
underflow:
	MOVV	R0, ret+8(FP)
	RET
overflow:
	MOVV	$PosInf, R4
	MOVV	R4, ret+8(FP)
	RET

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
16 Dec 2025 9.30 PM
root / root
0755
big
--
16 Dec 2025 9.34 PM
root / root
0755
bits
--
16 Dec 2025 9.30 PM
root / root
0755
cmplx
--
16 Dec 2025 9.30 PM
root / root
0755
rand
--
16 Dec 2025 9.30 PM
root / root
0755
abs.go
0.357 KB
4 Dec 2025 6.06 PM
root / root
0644
acos_s390x.s
3.69 KB
4 Dec 2025 6.06 PM
root / root
0644
acosh.go
1.708 KB
4 Dec 2025 6.06 PM
root / root
0644
acosh_s390x.s
4.319 KB
4 Dec 2025 6.06 PM
root / root
0644
arith_s390x.go
3.731 KB
4 Dec 2025 6.06 PM
root / root
0644
asin.go
1.089 KB
4 Dec 2025 6.06 PM
root / root
0644
asin_s390x.s
4.118 KB
4 Dec 2025 6.06 PM
root / root
0644
asinh.go
1.921 KB
4 Dec 2025 6.06 PM
root / root
0644
asinh_s390x.s
5.682 KB
4 Dec 2025 6.06 PM
root / root
0644
atan.go
3.026 KB
4 Dec 2025 6.06 PM
root / root
0644
atan2.go
1.523 KB
4 Dec 2025 6.06 PM
root / root
0644
atan2_s390x.s
6.875 KB
4 Dec 2025 6.06 PM
root / root
0644
atan_s390x.s
3.689 KB
4 Dec 2025 6.06 PM
root / root
0644
atanh.go
1.994 KB
4 Dec 2025 6.06 PM
root / root
0644
atanh_s390x.s
5.059 KB
4 Dec 2025 6.06 PM
root / root
0644
bits.go
1.87 KB
4 Dec 2025 6.06 PM
root / root
0644
cbrt.go
2.311 KB
4 Dec 2025 6.06 PM
root / root
0644
cbrt_s390x.s
4.886 KB
4 Dec 2025 6.06 PM
root / root
0644
const.go
2.762 KB
4 Dec 2025 6.06 PM
root / root
0644
copysign.go
0.387 KB
4 Dec 2025 6.06 PM
root / root
0644
cosh_s390x.s
5.594 KB
4 Dec 2025 6.06 PM
root / root
0644
dim.go
1.868 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_amd64.s
1.917 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_arm64.s
0.94 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_asm.go
0.347 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_loong64.s
1.195 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_noasm.go
0.412 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_riscv64.s
1.162 KB
4 Dec 2025 6.06 PM
root / root
0644
dim_s390x.s
1.969 KB
4 Dec 2025 6.06 PM
root / root
0644
erf.go
11.509 KB
4 Dec 2025 6.06 PM
root / root
0644
erf_s390x.s
8.495 KB
4 Dec 2025 6.06 PM
root / root
0644
erfc_s390x.s
14.361 KB
4 Dec 2025 6.06 PM
root / root
0644
erfinv.go
3.369 KB
4 Dec 2025 6.06 PM
root / root
0644
exp.go
5.376 KB
4 Dec 2025 6.06 PM
root / root
0644
exp2_asm.go
0.257 KB
4 Dec 2025 6.06 PM
root / root
0644
exp2_noasm.go
0.289 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_amd64.go
0.255 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_amd64.s
4.242 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_arm64.s
5.356 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_asm.go
0.272 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_loong64.s
5.338 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_noasm.go
0.307 KB
4 Dec 2025 6.06 PM
root / root
0644
exp_s390x.s
4.63 KB
4 Dec 2025 6.06 PM
root / root
0644
expm1.go
7.909 KB
4 Dec 2025 6.06 PM
root / root
0644
expm1_s390x.s
5.201 KB
4 Dec 2025 6.06 PM
root / root
0644
floor.go
3.291 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_386.s
1.474 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_amd64.s
1.999 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_arm64.s
0.56 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_asm.go
0.442 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_loong64.s
1.015 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_noasm.go
0.542 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_ppc64x.s
0.487 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_riscv64.s
1.731 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_s390x.s
0.565 KB
4 Dec 2025 6.06 PM
root / root
0644
floor_wasm.s
0.448 KB
4 Dec 2025 6.06 PM
root / root
0644
fma.go
4.86 KB
4 Dec 2025 6.06 PM
root / root
0644
frexp.go
0.907 KB
4 Dec 2025 6.06 PM
root / root
0644
gamma.go
5.525 KB
4 Dec 2025 6.06 PM
root / root
0644
hypot.go
0.83 KB
4 Dec 2025 6.06 PM
root / root
0644
hypot_386.s
1.813 KB
4 Dec 2025 6.06 PM
root / root
0644
hypot_amd64.s
1.055 KB
4 Dec 2025 6.06 PM
root / root
0644
hypot_asm.go
0.258 KB
4 Dec 2025 6.06 PM
root / root
0644
hypot_noasm.go
0.29 KB
4 Dec 2025 6.06 PM
root / root
0644
j0.go
13.604 KB
4 Dec 2025 6.06 PM
root / root
0644
j1.go
13.304 KB
4 Dec 2025 6.06 PM
root / root
0644
jn.go
7.179 KB
4 Dec 2025 6.06 PM
root / root
0644
ldexp.go
1.052 KB
4 Dec 2025 6.06 PM
root / root
0644
lgamma.go
11.025 KB
4 Dec 2025 6.06 PM
root / root
0644
log.go
3.86 KB
4 Dec 2025 6.06 PM
root / root
0644
log10.go
0.853 KB
4 Dec 2025 6.06 PM
root / root
0644
log10_s390x.s
4.731 KB
4 Dec 2025 6.06 PM
root / root
0644
log1p.go
6.345 KB
4 Dec 2025 6.06 PM
root / root
0644
log1p_s390x.s
5.106 KB
4 Dec 2025 6.06 PM
root / root
0644
log_amd64.s
3.663 KB
4 Dec 2025 6.06 PM
root / root
0644
log_asm.go
0.253 KB
4 Dec 2025 6.06 PM
root / root
0644
log_s390x.s
4.292 KB
4 Dec 2025 6.06 PM
root / root
0644
log_stub.go
0.285 KB
4 Dec 2025 6.06 PM
root / root
0644
logb.go
0.997 KB
4 Dec 2025 6.06 PM
root / root
0644
mod.go
0.882 KB
4 Dec 2025 6.06 PM
root / root
0644
modf.go
0.892 KB
4 Dec 2025 6.06 PM
root / root
0644
modf_arm64.s
0.437 KB
4 Dec 2025 6.06 PM
root / root
0644
modf_asm.go
0.285 KB
4 Dec 2025 6.06 PM
root / root
0644
modf_noasm.go
0.318 KB
4 Dec 2025 6.06 PM
root / root
0644
modf_ppc64x.s
0.406 KB
4 Dec 2025 6.06 PM
root / root
0644
nextafter.go
1.21 KB
4 Dec 2025 6.06 PM
root / root
0644
pow.go
3.646 KB
4 Dec 2025 6.06 PM
root / root
0644
pow10.go
1.239 KB
4 Dec 2025 6.06 PM
root / root
0644
pow_s390x.s
16.216 KB
4 Dec 2025 6.06 PM
root / root
0644
remainder.go
2.043 KB
4 Dec 2025 6.06 PM
root / root
0644
signbit.go
0.295 KB
4 Dec 2025 6.06 PM
root / root
0644
sin.go
6.353 KB
4 Dec 2025 6.06 PM
root / root
0644
sin_s390x.s
8.572 KB
4 Dec 2025 6.06 PM
root / root
0644
sincos.go
1.758 KB
4 Dec 2025 6.06 PM
root / root
0644
sinh.go
1.692 KB
4 Dec 2025 6.06 PM
root / root
0644
sinh_s390x.s
5.978 KB
4 Dec 2025 6.06 PM
root / root
0644
sqrt.go
4.751 KB
4 Dec 2025 6.06 PM
root / root
0644
stubs.go
2.572 KB
4 Dec 2025 6.06 PM
root / root
0644
stubs_s390x.s
12.382 KB
4 Dec 2025 6.06 PM
root / root
0644
tan.go
3.68 KB
4 Dec 2025 6.06 PM
root / root
0644
tan_s390x.s
2.683 KB
4 Dec 2025 6.06 PM
root / root
0644
tanh.go
2.657 KB
4 Dec 2025 6.06 PM
root / root
0644
tanh_s390x.s
4.571 KB
4 Dec 2025 6.06 PM
root / root
0644
trig_reduce.go
3.339 KB
4 Dec 2025 6.06 PM
root / root
0644
unsafe.go
1.596 KB
4 Dec 2025 6.06 PM
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF