mirror of https://github.com/n-hys/msun.git
initial import. FreeBSD msun
This commit is contained in:
commit
05188605ea
|
@ -0,0 +1,234 @@
|
|||
# @(#)Makefile 5.1beta 93/09/24
|
||||
# $FreeBSD$
|
||||
#
|
||||
# ====================================================
|
||||
# Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
#
|
||||
# Developed at SunPro, a Sun Microsystems, Inc. business.
|
||||
# Permission to use, copy, modify, and distribute this
|
||||
# software is freely granted, provided that this notice
|
||||
# is preserved.
|
||||
# ====================================================
|
||||
#
|
||||
#
|
||||
|
||||
PACKAGE= clibs
|
||||
ARCH_SUBDIR= ${MACHINE_CPUARCH:S/i386/i387/}
|
||||
|
||||
.include "${ARCH_SUBDIR}/Makefile.inc"
|
||||
|
||||
.PATH: ${.CURDIR}/${ARCH_SUBDIR}
|
||||
.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
|
||||
.PATH: ${.CURDIR}/x86
|
||||
CFLAGS+= -I${.CURDIR}/x86
|
||||
.endif
|
||||
|
||||
# long double format
|
||||
.if ${LDBL_PREC} == 64
|
||||
.PATH: ${.CURDIR}/ld80
|
||||
CFLAGS+= -I${.CURDIR}/ld80
|
||||
.elif ${LDBL_PREC} == 113
|
||||
.PATH: ${.CURDIR}/ld128
|
||||
CFLAGS+= -I${.CURDIR}/ld128
|
||||
.endif
|
||||
|
||||
CFLAGS+= -I${.CURDIR}/${ARCH_SUBDIR}
|
||||
|
||||
.PATH: ${.CURDIR}/bsdsrc
|
||||
.PATH: ${.CURDIR}/src
|
||||
.PATH: ${.CURDIR}/man
|
||||
|
||||
LIB= m
|
||||
SHLIBDIR?= /lib
|
||||
SHLIB_MAJOR= 5
|
||||
WARNS?= 1
|
||||
IGNORE_PRAGMA=
|
||||
COMMON_SRCS= b_exp.c b_log.c b_tgamma.c \
|
||||
e_acos.c e_acosf.c e_acosh.c e_acoshf.c e_asin.c e_asinf.c \
|
||||
e_atan2.c e_atan2f.c e_atanh.c e_atanhf.c e_cosh.c e_coshf.c e_exp.c \
|
||||
e_expf.c e_fmod.c e_fmodf.c e_gamma.c e_gamma_r.c e_gammaf.c \
|
||||
e_gammaf_r.c e_hypot.c e_hypotf.c e_j0.c e_j0f.c e_j1.c e_j1f.c \
|
||||
e_jn.c e_jnf.c e_lgamma.c e_lgamma_r.c e_lgammaf.c e_lgammaf_r.c \
|
||||
e_log.c e_log10.c e_log10f.c e_log2.c e_log2f.c e_logf.c \
|
||||
e_pow.c e_powf.c e_rem_pio2.c \
|
||||
e_rem_pio2f.c e_remainder.c e_remainderf.c e_scalb.c e_scalbf.c \
|
||||
e_sinh.c e_sinhf.c e_sqrt.c e_sqrtf.c fenv.c \
|
||||
imprecise.c \
|
||||
k_cos.c k_cosf.c k_exp.c k_expf.c k_rem_pio2.c k_sin.c k_sinf.c \
|
||||
k_tan.c k_tanf.c \
|
||||
s_asinh.c s_asinhf.c s_atan.c s_atanf.c s_carg.c s_cargf.c s_cargl.c \
|
||||
s_cbrt.c s_cbrtf.c s_ceil.c s_ceilf.c \
|
||||
s_copysign.c s_copysignf.c s_cos.c s_cosf.c \
|
||||
s_csqrt.c s_csqrtf.c s_erf.c s_erff.c \
|
||||
s_exp2.c s_exp2f.c s_expm1.c s_expm1f.c s_fabsf.c s_fdim.c \
|
||||
s_finite.c s_finitef.c \
|
||||
s_floor.c s_floorf.c s_fma.c s_fmaf.c \
|
||||
s_fmax.c s_fmaxf.c s_fmin.c \
|
||||
s_fminf.c s_frexp.c s_frexpf.c s_ilogb.c s_ilogbf.c \
|
||||
s_ilogbl.c s_isfinite.c s_isnan.c s_isnormal.c \
|
||||
s_llrint.c s_llrintf.c s_llround.c s_llroundf.c s_llroundl.c \
|
||||
s_log1p.c s_log1pf.c s_logb.c s_logbf.c s_lrint.c s_lrintf.c \
|
||||
s_lround.c s_lroundf.c s_lroundl.c s_modff.c \
|
||||
s_nan.c s_nearbyint.c s_nextafter.c s_nextafterf.c \
|
||||
s_nexttowardf.c s_remquo.c s_remquof.c \
|
||||
s_rint.c s_rintf.c s_round.c s_roundf.c \
|
||||
s_scalbln.c s_scalbn.c s_scalbnf.c s_signbit.c \
|
||||
s_signgam.c s_significand.c s_significandf.c s_sin.c \
|
||||
s_sincos.c s_sincosf.c s_sinf.c \
|
||||
s_tan.c s_tanf.c s_tanh.c s_tanhf.c s_tgammaf.c s_trunc.c s_truncf.c \
|
||||
w_cabs.c w_cabsf.c w_drem.c w_dremf.c
|
||||
|
||||
# Location of fpmath.h and _fpmath.h
|
||||
.if exists(${LIBCSRCDIR}/${MACHINE_ARCH})
|
||||
LIBC_ARCH=${MACHINE_ARCH}
|
||||
.else
|
||||
LIBC_ARCH=${MACHINE_CPUARCH}
|
||||
.endif
|
||||
CFLAGS+= -I${.CURDIR}/src -I${LIBCSRCDIR}/include \
|
||||
-I${LIBCSRCDIR}/${LIBC_ARCH}
|
||||
SYM_MAPS+= ${.CURDIR}/Symbol.map
|
||||
|
||||
VERSION_DEF= ${LIBCSRCDIR}/Versions.def
|
||||
SYMBOL_MAPS= ${SYM_MAPS}
|
||||
|
||||
# C99 long double functions
|
||||
COMMON_SRCS+= s_copysignl.c s_fabsl.c s_llrintl.c s_lrintl.c s_modfl.c
|
||||
.if ${LDBL_PREC} != 53
|
||||
# If long double != double use these; otherwise, we alias the double versions.
|
||||
COMMON_SRCS+= catrigl.c \
|
||||
e_acoshl.c e_acosl.c e_asinl.c e_atan2l.c e_atanhl.c \
|
||||
e_coshl.c e_fmodl.c e_hypotl.c \
|
||||
e_lgammal.c e_lgammal_r.c \
|
||||
e_remainderl.c e_sinhl.c e_sqrtl.c \
|
||||
invtrig.c k_cosl.c k_sinl.c k_tanl.c \
|
||||
s_asinhl.c s_atanl.c s_cbrtl.c s_ceill.c s_cosl.c s_cprojl.c \
|
||||
s_csqrtl.c s_erfl.c s_exp2l.c s_expl.c s_floorl.c s_fmal.c \
|
||||
s_fmaxl.c s_fminl.c s_frexpl.c s_logbl.c s_logl.c s_nanl.c \
|
||||
s_nextafterl.c s_nexttoward.c s_remquol.c s_rintl.c s_roundl.c \
|
||||
s_scalbnl.c s_sinl.c s_sincosl.c \
|
||||
s_tanhl.c s_tanl.c s_truncl.c w_cabsl.c
|
||||
.endif
|
||||
|
||||
# C99 complex functions
|
||||
COMMON_SRCS+= catrig.c catrigf.c \
|
||||
s_ccosh.c s_ccoshf.c s_cexp.c s_cexpf.c \
|
||||
s_cimag.c s_cimagf.c s_cimagl.c \
|
||||
s_conj.c s_conjf.c s_conjl.c \
|
||||
s_cproj.c s_cprojf.c s_creal.c s_crealf.c s_creall.c \
|
||||
s_csinh.c s_csinhf.c s_ctanh.c s_ctanhf.c
|
||||
|
||||
# FreeBSD's C library supplies these functions:
|
||||
#COMMON_SRCS+= s_fabs.c s_frexp.c s_isnan.c s_ldexp.c s_modf.c
|
||||
|
||||
# Exclude the generic versions of what we provide in the MD area.
|
||||
.if defined(ARCH_SRCS)
|
||||
.for i in ${ARCH_SRCS}
|
||||
COMMON_SRCS:= ${COMMON_SRCS:N${i:R}.c}
|
||||
.endfor
|
||||
.endif
|
||||
|
||||
SRCS= ${COMMON_SRCS} ${ARCH_SRCS}
|
||||
|
||||
INCS+= fenv.h math.h
|
||||
|
||||
MAN= acos.3 acosh.3 asin.3 asinh.3 atan.3 atan2.3 atanh.3 \
|
||||
ceil.3 cacos.3 ccos.3 ccosh.3 cexp.3 \
|
||||
cimag.3 copysign.3 cos.3 cosh.3 csqrt.3 erf.3 exp.3 fabs.3 fdim.3 \
|
||||
feclearexcept.3 feenableexcept.3 fegetenv.3 \
|
||||
fegetround.3 fenv.3 floor.3 \
|
||||
fma.3 fmax.3 fmod.3 hypot.3 ieee.3 ieee_test.3 ilogb.3 j0.3 \
|
||||
lgamma.3 log.3 lrint.3 lround.3 math.3 nan.3 \
|
||||
nextafter.3 remainder.3 rint.3 \
|
||||
round.3 scalbn.3 signbit.3 sin.3 sincos.3 \
|
||||
sinh.3 sqrt.3 tan.3 tanh.3 trunc.3 \
|
||||
complex.3
|
||||
|
||||
MLINKS+=acos.3 acosf.3 acos.3 acosl.3
|
||||
MLINKS+=acosh.3 acoshf.3 acosh.3 acoshl.3
|
||||
MLINKS+=asin.3 asinf.3 asin.3 asinl.3
|
||||
MLINKS+=asinh.3 asinhf.3 asinh.3 asinhl.3
|
||||
MLINKS+=atan.3 atanf.3 atan.3 atanl.3
|
||||
MLINKS+=atanh.3 atanhf.3 atanh.3 atanhl.3
|
||||
MLINKS+=atan2.3 atan2f.3 atan2.3 atan2l.3 \
|
||||
atan2.3 carg.3 atan2.3 cargf.3 atan2.3 cargl.3
|
||||
MLINKS+=cacos.3 cacosf.3 cacos.3 cacosl.3 \
|
||||
cacos.3 cacosh.3 cacos.3 cacoshf.3 cacos.3 cacoshl.3 \
|
||||
cacos.3 casin.3 cacos.3 casinf.3 cacos.3 casinl.3 \
|
||||
cacos.3 casinh.3 cacos.3 casinhf.3 cacos.3 casinhl.3 \
|
||||
cacos.3 catan.3 cacos.3 catanf.3 cacos.3 catanl.3 \
|
||||
cacos.3 catanh.3 cacos.3 catanhf.3 cacos.3 catanhl.3
|
||||
MLINKS+=ccos.3 ccosf.3 ccos.3 csin.3 ccos.3 csinf.3 ccos.3 ctan.3 ccos.3 ctanf.3
|
||||
MLINKS+=ccosh.3 ccoshf.3 ccosh.3 csinh.3 ccosh.3 csinhf.3 \
|
||||
ccosh.3 ctanh.3 ccosh.3 ctanhf.3
|
||||
MLINKS+=ceil.3 ceilf.3 ceil.3 ceill.3
|
||||
MLINKS+=cexp.3 cexpf.3
|
||||
MLINKS+=cimag.3 cimagf.3 cimag.3 cimagl.3 \
|
||||
cimag.3 conj.3 cimag.3 conjf.3 cimag.3 conjl.3 \
|
||||
cimag.3 cproj.3 cimag.3 cprojf.3 cimag.3 cprojl.3 \
|
||||
cimag.3 creal.3 cimag.3 crealf.3 cimag.3 creall.3
|
||||
MLINKS+=copysign.3 copysignf.3 copysign.3 copysignl.3
|
||||
MLINKS+=cos.3 cosf.3 cos.3 cosl.3
|
||||
MLINKS+=cosh.3 coshf.3 cosh.3 coshl.3
|
||||
MLINKS+=csqrt.3 csqrtf.3 csqrt.3 csqrtl.3
|
||||
MLINKS+=erf.3 erfc.3 erf.3 erff.3 erf.3 erfcf.3 erf.3 erfl.3 erf.3 erfcl.3
|
||||
MLINKS+=exp.3 expm1.3 exp.3 expm1f.3 exp.3 expm1l.3 exp.3 pow.3 exp.3 powf.3 \
|
||||
exp.3 powl.3 exp.3 exp2.3 exp.3 exp2f.3 exp.3 exp2l.3 exp.3 expf.3 \
|
||||
exp.3 expl.3
|
||||
MLINKS+=fabs.3 fabsf.3 fabs.3 fabsl.3
|
||||
MLINKS+=fdim.3 fdimf.3 fdim.3 fdiml.3
|
||||
MLINKS+=feclearexcept.3 fegetexceptflag.3 feclearexcept.3 feraiseexcept.3 \
|
||||
feclearexcept.3 fesetexceptflag.3 feclearexcept.3 fetestexcept.3
|
||||
MLINKS+=feenableexcept.3 fedisableexcept.3 feenableexcept.3 fegetexcept.3
|
||||
MLINKS+=fegetenv.3 feholdexcept.3 fegetenv.3 fesetenv.3 \
|
||||
fegetenv.3 feupdateenv.3
|
||||
MLINKS+=fegetround.3 fesetround.3
|
||||
MLINKS+=floor.3 floorf.3 floor.3 floorl.3
|
||||
MLINKS+=fma.3 fmaf.3 fma.3 fmal.3
|
||||
MLINKS+=fmax.3 fmaxf.3 fmax.3 fmaxl.3 \
|
||||
fmax.3 fmin.3 fmax.3 fminf.3 fmax.3 fminl.3
|
||||
MLINKS+=fmod.3 fmodf.3 fmod.3 fmodl.3
|
||||
MLINKS+=hypot.3 cabs.3 hypot.3 cabsf.3 hypot.3 cabsl.3 \
|
||||
hypot.3 hypotf.3 hypot.3 hypotl.3
|
||||
MLINKS+=ieee_test.3 scalb.3 ieee_test.3 scalbf.3
|
||||
MLINKS+=ieee_test.3 significand.3 ieee_test.3 significandf.3
|
||||
MLINKS+=ilogb.3 ilogbf.3 ilogb.3 ilogbl.3 \
|
||||
ilogb.3 logb.3 ilogb.3 logbf.3 ilogb.3 logbl.3
|
||||
MLINKS+=j0.3 j1.3 j0.3 jn.3 j0.3 y0.3 j0.3 y1.3 j0.3 y1f.3 j0.3 yn.3
|
||||
MLINKS+=j0.3 j0f.3 j0.3 j1f.3 j0.3 jnf.3 j0.3 y0f.3 j0.3 ynf.3
|
||||
MLINKS+=lgamma.3 gamma.3 lgamma.3 gammaf.3 \
|
||||
lgamma.3 lgammaf.3 lgamma.3 lgammal.3 \
|
||||
lgamma.3 tgamma.3 lgamma.3 tgammaf.3
|
||||
MLINKS+=log.3 log10.3 log.3 log10f.3 log.3 log10l.3 \
|
||||
log.3 log1p.3 log.3 log1pf.3 log.3 log1pl.3 \
|
||||
log.3 logf.3 log.3 logl.3 \
|
||||
log.3 log2.3 log.3 log2f.3 log.3 log2l.3
|
||||
MLINKS+=lrint.3 llrint.3 lrint.3 llrintf.3 lrint.3 llrintl.3 \
|
||||
lrint.3 lrintf.3 lrint.3 lrintl.3
|
||||
MLINKS+=lround.3 llround.3 lround.3 llroundf.3 lround.3 llroundl.3 \
|
||||
lround.3 lroundf.3 lround.3 lroundl.3
|
||||
MLINKS+=nan.3 nanf.3 nan.3 nanl.3
|
||||
MLINKS+=nextafter.3 nextafterf.3 nextafter.3 nextafterl.3
|
||||
MLINKS+=nextafter.3 nexttoward.3 nextafter.3 nexttowardf.3
|
||||
MLINKS+=nextafter.3 nexttowardl.3
|
||||
MLINKS+=remainder.3 remainderf.3 remainder.3 remainderl.3 \
|
||||
remainder.3 remquo.3 remainder.3 remquof.3 remainder.3 remquol.3
|
||||
MLINKS+=rint.3 rintf.3 rint.3 rintl.3 \
|
||||
rint.3 nearbyint.3 rint.3 nearbyintf.3 rint.3 nearbyintl.3
|
||||
MLINKS+=round.3 roundf.3 round.3 roundl.3
|
||||
MLINKS+=scalbn.3 scalbln.3 scalbn.3 scalblnf.3 scalbn.3 scalblnl.3
|
||||
MLINKS+=scalbn.3 scalbnf.3 scalbn.3 scalbnl.3
|
||||
MLINKS+=sin.3 sinf.3 sin.3 sinl.3
|
||||
MLINKS+=sincos.3 sincosf.3 sin.3 sincosl.3
|
||||
MLINKS+=sinh.3 sinhf.3 sinh.3 sinhl.3
|
||||
MLINKS+=sqrt.3 cbrt.3 sqrt.3 cbrtf.3 sqrt.3 cbrtl.3 sqrt.3 sqrtf.3 \
|
||||
sqrt.3 sqrtl.3
|
||||
MLINKS+=tan.3 tanf.3 tan.3 tanl.3
|
||||
MLINKS+=tanh.3 tanhf.3 tanh.3 tanhl.3
|
||||
MLINKS+=trunc.3 truncf.3 trunc.3 truncl.3
|
||||
|
||||
.include <src.opts.mk>
|
||||
|
||||
HAS_TESTS=
|
||||
SUBDIR.${MK_TESTS}+= tests
|
||||
|
||||
.include <bsd.lib.mk>
|
|
@ -0,0 +1,18 @@
|
|||
# $FreeBSD$
|
||||
# Autogenerated - do NOT edit!
|
||||
|
||||
DIRDEPS = \
|
||||
gnu/lib/csu \
|
||||
gnu/lib/libgcc \
|
||||
include \
|
||||
include/xlocale \
|
||||
lib/${CSU_DIR} \
|
||||
lib/libc \
|
||||
lib/libcompiler_rt \
|
||||
|
||||
|
||||
.include <dirdeps.mk>
|
||||
|
||||
.if ${DEP_RELDIR} == ${_DEP_RELDIR}
|
||||
# local dependencies - needed for -jN in clean tree
|
||||
.endif
|
|
@ -0,0 +1,300 @@
|
|||
/*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
/* 7.0-CURRENT */
|
||||
FBSD_1.0 {
|
||||
__fe_dfl_env;
|
||||
tgamma;
|
||||
acos;
|
||||
acosf;
|
||||
acosh;
|
||||
acoshf;
|
||||
asin;
|
||||
asinf;
|
||||
atan2;
|
||||
atan2f;
|
||||
atanh;
|
||||
atanhf;
|
||||
cosh;
|
||||
coshf;
|
||||
exp;
|
||||
expf;
|
||||
fmod;
|
||||
fmodf;
|
||||
gamma;
|
||||
gamma_r;
|
||||
gammaf;
|
||||
gammaf_r;
|
||||
hypot;
|
||||
hypotf;
|
||||
j0;
|
||||
y0;
|
||||
j0f;
|
||||
y0f;
|
||||
j1;
|
||||
y1;
|
||||
j1f;
|
||||
y1f;
|
||||
jn;
|
||||
yn;
|
||||
jnf;
|
||||
ynf;
|
||||
lgamma;
|
||||
lgamma_r;
|
||||
lgammaf;
|
||||
lgammaf_r;
|
||||
log;
|
||||
log10;
|
||||
log10f;
|
||||
logf;
|
||||
pow;
|
||||
powf;
|
||||
remainder;
|
||||
remainderf;
|
||||
scalb;
|
||||
scalbf;
|
||||
sinh;
|
||||
sinhf;
|
||||
sqrt;
|
||||
sqrtf;
|
||||
asinh;
|
||||
asinhf;
|
||||
atan;
|
||||
atanf;
|
||||
cbrt;
|
||||
cbrtf;
|
||||
ceil;
|
||||
ceilf;
|
||||
ceill;
|
||||
cimag;
|
||||
cimagf;
|
||||
cimagl;
|
||||
conj;
|
||||
conjf;
|
||||
conjl;
|
||||
copysign;
|
||||
copysignf;
|
||||
copysignl;
|
||||
cos;
|
||||
cosf;
|
||||
creal;
|
||||
crealf;
|
||||
creall;
|
||||
erf;
|
||||
erfc;
|
||||
erff;
|
||||
erfcf;
|
||||
exp2;
|
||||
exp2f;
|
||||
expm1;
|
||||
expm1f;
|
||||
fabs;
|
||||
fabsf;
|
||||
fabsl;
|
||||
fdim;
|
||||
fdimf;
|
||||
fdiml;
|
||||
finite;
|
||||
finitef;
|
||||
floor;
|
||||
floorf;
|
||||
floorl;
|
||||
fma;
|
||||
fmaf;
|
||||
fmal;
|
||||
fmax;
|
||||
fmaxf;
|
||||
fmaxl;
|
||||
fmin;
|
||||
fminf;
|
||||
fminl;
|
||||
frexp;
|
||||
frexpf;
|
||||
frexpl;
|
||||
ilogb;
|
||||
ilogbf;
|
||||
ilogbl;
|
||||
__isfinite;
|
||||
__isfinitef;
|
||||
__isfinitel;
|
||||
isnanf;
|
||||
__isnanl;
|
||||
__isnormal;
|
||||
__isnormalf;
|
||||
__isnormall;
|
||||
llrint;
|
||||
llrintf;
|
||||
llround;
|
||||
llroundf;
|
||||
llroundl;
|
||||
log1p;
|
||||
log1pf;
|
||||
logb;
|
||||
logbf;
|
||||
lrint;
|
||||
lrintf;
|
||||
lround;
|
||||
lroundf;
|
||||
lroundl;
|
||||
modff;
|
||||
modfl;
|
||||
nearbyint;
|
||||
nearbyintf;
|
||||
nextafter;
|
||||
nexttoward;
|
||||
nexttowardl;
|
||||
nextafterl;
|
||||
nextafterf;
|
||||
nexttowardf;
|
||||
remquo;
|
||||
remquof;
|
||||
rint;
|
||||
rintf;
|
||||
round;
|
||||
roundf;
|
||||
roundl;
|
||||
scalbln;
|
||||
scalblnf;
|
||||
scalblnl;
|
||||
scalbn;
|
||||
scalbnl;
|
||||
scalbnf;
|
||||
ldexpf;
|
||||
ldexpl;
|
||||
__signbit;
|
||||
__signbitf;
|
||||
__signbitl;
|
||||
signgam;
|
||||
significand;
|
||||
significandf;
|
||||
sin;
|
||||
sinf;
|
||||
tan;
|
||||
tanf;
|
||||
tanh;
|
||||
tanhf;
|
||||
trunc;
|
||||
truncf;
|
||||
truncl;
|
||||
cabs;
|
||||
cabsf;
|
||||
drem;
|
||||
dremf;
|
||||
};
|
||||
|
||||
/* First added in 8.0-CURRENT */
|
||||
FBSD_1.1 {
|
||||
carg;
|
||||
cargf;
|
||||
csqrt;
|
||||
csqrtf;
|
||||
logbl;
|
||||
nan;
|
||||
nanf;
|
||||
nanl;
|
||||
llrintl;
|
||||
lrintl;
|
||||
nearbyintl;
|
||||
rintl;
|
||||
exp2l;
|
||||
sinl;
|
||||
cosl;
|
||||
tanl;
|
||||
tgammaf;
|
||||
sqrtl;
|
||||
hypotl;
|
||||
cabsl;
|
||||
csqrtl;
|
||||
remquol;
|
||||
remainderl;
|
||||
fmodl;
|
||||
acosl;
|
||||
asinl;
|
||||
atan2l;
|
||||
atanl;
|
||||
cargl;
|
||||
cproj;
|
||||
cprojf;
|
||||
cprojl;
|
||||
};
|
||||
|
||||
/* First added in 9.0-CURRENT */
|
||||
FBSD_1.2 {
|
||||
__isnanf;
|
||||
cbrtl;
|
||||
cexp;
|
||||
cexpf;
|
||||
log2;
|
||||
log2f;
|
||||
};
|
||||
|
||||
/* First added in 10.0-CURRENT */
|
||||
FBSD_1.3 {
|
||||
feclearexcept;
|
||||
fegetexceptflag;
|
||||
fetestexcept;
|
||||
fegetround;
|
||||
fesetround;
|
||||
fesetenv;
|
||||
acoshl;
|
||||
asinhl;
|
||||
atanhl;
|
||||
cacos;
|
||||
cacosf;
|
||||
cacosh;
|
||||
cacoshf;
|
||||
casin;
|
||||
casinf;
|
||||
casinh;
|
||||
casinhf;
|
||||
catan;
|
||||
catanf;
|
||||
catanh;
|
||||
catanhf;
|
||||
csin;
|
||||
csinf;
|
||||
csinh;
|
||||
csinhf;
|
||||
ccos;
|
||||
ccosf;
|
||||
ccosh;
|
||||
ccoshf;
|
||||
coshl;
|
||||
ctan;
|
||||
ctanf;
|
||||
ctanh;
|
||||
ctanhf;
|
||||
erfcl;
|
||||
erfl;
|
||||
expl;
|
||||
expm1l;
|
||||
lgammal;
|
||||
log10l;
|
||||
log1pl;
|
||||
log2l;
|
||||
logl;
|
||||
sinhl;
|
||||
tanhl;
|
||||
/* Implemented as weak aliases for imprecise versions */
|
||||
powl;
|
||||
tgammal;
|
||||
};
|
||||
|
||||
/* First added in 11.0-CURRENT */
|
||||
FBSD_1.4 {
|
||||
lgammal_r;
|
||||
};
|
||||
|
||||
/* First added in 12.0-CURRENT */
|
||||
FBSD_1.5 {
|
||||
cacoshl;
|
||||
cacosl;
|
||||
casinhl;
|
||||
casinl;
|
||||
catanl;
|
||||
catanhl;
|
||||
sincos;
|
||||
sincosf;
|
||||
sincosl;
|
||||
};
|
|
@ -0,0 +1,4 @@
|
|||
# $FreeBSD$
|
||||
|
||||
LDBL_PREC = 113
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* Copyright (c) 2013 Andrew Turner <andrew@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#define __fenv_static
|
||||
#include "fenv.h"
|
||||
|
||||
/*
|
||||
* Hopefully the system ID byte is immutable, so it's valid to use
|
||||
* this as a default environment.
|
||||
*/
|
||||
const fenv_t __fe_dfl_env = 0;
|
||||
|
||||
#ifdef __GNUC_GNU_INLINE__
|
||||
#error "This file must be compiled with C99 'inline' semantics"
|
||||
#endif
|
||||
|
||||
extern inline int feclearexcept(int __excepts);
|
||||
extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
extern inline int feraiseexcept(int __excepts);
|
||||
extern inline int fetestexcept(int __excepts);
|
||||
extern inline int fegetround(void);
|
||||
extern inline int fesetround(int __round);
|
||||
extern inline int fegetenv(fenv_t *__envp);
|
||||
extern inline int feholdexcept(fenv_t *__envp);
|
||||
extern inline int fesetenv(const fenv_t *__envp);
|
||||
extern inline int feupdateenv(const fenv_t *__envp);
|
||||
extern inline int feenableexcept(int __mask);
|
||||
extern inline int fedisableexcept(int __mask);
|
||||
extern inline int fegetexcept(void);
|
|
@ -0,0 +1,246 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _FENV_H_
|
||||
#define _FENV_H_
|
||||
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef __fenv_static
|
||||
#define __fenv_static static
|
||||
#endif
|
||||
|
||||
typedef __uint64_t fenv_t;
|
||||
typedef __uint64_t fexcept_t;
|
||||
|
||||
/* Exception flags */
|
||||
#define FE_INVALID 0x00000001
|
||||
#define FE_DIVBYZERO 0x00000002
|
||||
#define FE_OVERFLOW 0x00000004
|
||||
#define FE_UNDERFLOW 0x00000008
|
||||
#define FE_INEXACT 0x00000010
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
|
||||
|
||||
/*
|
||||
* Rounding modes
|
||||
*
|
||||
* We can't just use the hardware bit values here, because that would
|
||||
* make FE_UPWARD and FE_DOWNWARD negative, which is not allowed.
|
||||
*/
|
||||
#define FE_TONEAREST 0x0
|
||||
#define FE_UPWARD 0x1
|
||||
#define FE_DOWNWARD 0x2
|
||||
#define FE_TOWARDZERO 0x3
|
||||
#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \
|
||||
FE_UPWARD | FE_TOWARDZERO)
|
||||
#define _ROUND_SHIFT 22
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Default floating-point environment */
|
||||
extern const fenv_t __fe_dfl_env;
|
||||
#define FE_DFL_ENV (&__fe_dfl_env)
|
||||
|
||||
/* We need to be able to map status flag positions to mask flag positions */
|
||||
#define _FPUSW_SHIFT 8
|
||||
#define _ENABLE_MASK (FE_ALL_EXCEPT << _FPUSW_SHIFT)
|
||||
|
||||
#define __mrs_fpcr(__r) __asm __volatile("mrs %0, fpcr" : "=r" (__r))
|
||||
#define __msr_fpcr(__r) __asm __volatile("msr fpcr, %0" : : "r" (__r))
|
||||
|
||||
#define __mrs_fpsr(__r) __asm __volatile("mrs %0, fpsr" : "=r" (__r))
|
||||
#define __msr_fpsr(__r) __asm __volatile("msr fpsr, %0" : : "r" (__r))
|
||||
|
||||
__fenv_static __inline int
|
||||
feclearexcept(int __excepts)
|
||||
{
|
||||
fexcept_t __r;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
__r &= ~__excepts;
|
||||
__msr_fpsr(__r);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetexceptflag(fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
fexcept_t __r;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
*__flagp = __r & __excepts;
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fesetexceptflag(const fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
fexcept_t __r;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
__r &= ~__excepts;
|
||||
__r |= *__flagp & __excepts;
|
||||
__msr_fpsr(__r);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
feraiseexcept(int __excepts)
|
||||
{
|
||||
fexcept_t __r;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
__r |= __excepts;
|
||||
__msr_fpsr(__r);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fetestexcept(int __excepts)
|
||||
{
|
||||
fexcept_t __r;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
return (__r & __excepts);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetround(void)
|
||||
{
|
||||
fenv_t __r;
|
||||
|
||||
__mrs_fpcr(__r);
|
||||
return ((__r >> _ROUND_SHIFT) & _ROUND_MASK);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fesetround(int __round)
|
||||
{
|
||||
fenv_t __r;
|
||||
|
||||
if (__round & ~_ROUND_MASK)
|
||||
return (-1);
|
||||
__mrs_fpcr(__r);
|
||||
__r &= ~(_ROUND_MASK << _ROUND_SHIFT);
|
||||
__r |= __round << _ROUND_SHIFT;
|
||||
__msr_fpcr(__r);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetenv(fenv_t *__envp)
|
||||
{
|
||||
fenv_t __r;
|
||||
|
||||
__mrs_fpcr(__r);
|
||||
*__envp = __r & _ENABLE_MASK;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
*__envp |= __r & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT));
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
feholdexcept(fenv_t *__envp)
|
||||
{
|
||||
fenv_t __r;
|
||||
|
||||
__mrs_fpcr(__r);
|
||||
*__envp = __r & _ENABLE_MASK;
|
||||
__r &= ~(_ENABLE_MASK);
|
||||
__msr_fpcr(__r);
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
*__envp |= __r & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT));
|
||||
__r &= ~(_ENABLE_MASK);
|
||||
__msr_fpsr(__r);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fesetenv(const fenv_t *__envp)
|
||||
{
|
||||
|
||||
__msr_fpcr((*__envp) & _ENABLE_MASK);
|
||||
__msr_fpsr((*__envp) & (FE_ALL_EXCEPT | (_ROUND_MASK << _ROUND_SHIFT)));
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
feupdateenv(const fenv_t *__envp)
|
||||
{
|
||||
fexcept_t __r;
|
||||
|
||||
__mrs_fpsr(__r);
|
||||
fesetenv(__envp);
|
||||
feraiseexcept(__r & FE_ALL_EXCEPT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
/* We currently provide no external definitions of the functions below. */
|
||||
|
||||
static inline int
|
||||
feenableexcept(int __mask)
|
||||
{
|
||||
fenv_t __old_r, __new_r;
|
||||
|
||||
__mrs_fpcr(__old_r);
|
||||
__new_r = __old_r | ((__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT);
|
||||
__msr_fpcr(__new_r);
|
||||
return ((__old_r >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
static inline int
|
||||
fedisableexcept(int __mask)
|
||||
{
|
||||
fenv_t __old_r, __new_r;
|
||||
|
||||
__mrs_fpcr(__old_r);
|
||||
__new_r = __old_r & ~((__mask & FE_ALL_EXCEPT) << _FPUSW_SHIFT);
|
||||
__msr_fpcr(__new_r);
|
||||
return ((__old_r >> _FPUSW_SHIFT) & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
static inline int
|
||||
fegetexcept(void)
|
||||
{
|
||||
fenv_t __r;
|
||||
|
||||
__mrs_fpcr(__r);
|
||||
return ((__r & _ENABLE_MASK) >> _FPUSW_SHIFT);
|
||||
}
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_FENV_H_ */
|
|
@ -0,0 +1,11 @@
|
|||
# $FreeBSD$
|
||||
|
||||
ARCH_SRCS = e_fmod.S e_fmodf.S e_fmodl.S \
|
||||
e_remainder.S e_remainderf.S e_remainderl.S \
|
||||
e_sqrt.S e_sqrtf.S e_sqrtl.S \
|
||||
s_llrint.S s_llrintf.S s_llrintl.S \
|
||||
s_logbl.S s_lrint.S s_lrintf.S s_lrintl.S \
|
||||
s_remquo.S s_remquof.S s_remquol.S \
|
||||
s_rintl.S s_scalbn.S s_scalbnf.S s_scalbnl.S
|
||||
LDBL_PREC = 64
|
||||
SYM_MAPS += ${.CURDIR}/amd64/Symbol.map
|
|
@ -0,0 +1,12 @@
|
|||
/*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
FBSD_1.0 {
|
||||
fesetexceptflag;
|
||||
feraiseexcept;
|
||||
fegetenv;
|
||||
feholdexcept;
|
||||
feupdateenv;
|
||||
feenableexcept;
|
||||
fedisableexcept;
|
||||
};
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on the i387 version written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(fmod)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movsd %xmm1,-16(%rsp)
|
||||
fldl -16(%rsp)
|
||||
fldl -8(%rsp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
fstp %st
|
||||
ret
|
||||
END(fmod)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Based on the i387 version written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(fmodf)
|
||||
movss %xmm0,-4(%rsp)
|
||||
movss %xmm1,-8(%rsp)
|
||||
flds -8(%rsp)
|
||||
flds -4(%rsp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstps -4(%rsp)
|
||||
movss -4(%rsp),%xmm0
|
||||
fstp %st
|
||||
ret
|
||||
END(fmodf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on the i387 version written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(fmodl)
|
||||
fldt 24(%rsp)
|
||||
fldt 8(%rsp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(fmodl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on the i387 version written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
RCSID("from: FreeBSD: src/lib/msun/i387/e_remainder.S,v 1.8 2005/02/04 14:08:32 das Exp")
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(remainder)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movsd %xmm1,-16(%rsp)
|
||||
fldl -16(%rsp)
|
||||
fldl -8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,25 @@
|
|||
/*
|
||||
* Based on the i387 version written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
RCSID("from: $NetBSD: e_remainderf.S,v 1.2 1995/05/08 23:49:47 jtc Exp $")
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(remainderf)
|
||||
movss %xmm0,-4(%rsp)
|
||||
movss %xmm1,-8(%rsp)
|
||||
flds -8(%rsp)
|
||||
flds -4(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstps -4(%rsp)
|
||||
movss -4(%rsp),%xmm0
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on the i387 version written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(remainderl)
|
||||
fldt 24(%rsp)
|
||||
fldt 8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
testw $0x400,%ax
|
||||
jne 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,36 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(sqrt)
|
||||
sqrtsd %xmm0, %xmm0
|
||||
ret
|
||||
END(sqrt)
|
||||
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,35 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(sqrtf)
|
||||
sqrtss %xmm0, %xmm0
|
||||
ret
|
||||
END(sqrtf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,35 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(sqrtl)
|
||||
fldt 8(%rsp)
|
||||
fsqrt
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,164 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <machine/fpu.h>
|
||||
|
||||
#define __fenv_static
|
||||
#include "fenv.h"
|
||||
|
||||
#ifdef __GNUC_GNU_INLINE__
|
||||
#error "This file must be compiled with C99 'inline' semantics"
|
||||
#endif
|
||||
|
||||
const fenv_t __fe_dfl_env = {
|
||||
{ 0xffff0000 | __INITIAL_FPUCW__,
|
||||
0xffff0000,
|
||||
0xffffffff,
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff }
|
||||
},
|
||||
__INITIAL_MXCSR__
|
||||
};
|
||||
|
||||
extern inline int feclearexcept(int __excepts);
|
||||
extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
|
||||
int
|
||||
fesetexceptflag(const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
fenv_t env;
|
||||
|
||||
__fnstenv(&env.__x87);
|
||||
env.__x87.__status &= ~excepts;
|
||||
env.__x87.__status |= *flagp & excepts;
|
||||
__fldenv(env.__x87);
|
||||
|
||||
__stmxcsr(&env.__mxcsr);
|
||||
env.__mxcsr &= ~excepts;
|
||||
env.__mxcsr |= *flagp & excepts;
|
||||
__ldmxcsr(env.__mxcsr);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feraiseexcept(int excepts)
|
||||
{
|
||||
fexcept_t ex = excepts;
|
||||
|
||||
fesetexceptflag(&ex, excepts);
|
||||
__fwait();
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern inline int fetestexcept(int __excepts);
|
||||
extern inline int fegetround(void);
|
||||
extern inline int fesetround(int __round);
|
||||
|
||||
int
|
||||
fegetenv(fenv_t *envp)
|
||||
{
|
||||
|
||||
__fnstenv(&envp->__x87);
|
||||
__stmxcsr(&envp->__mxcsr);
|
||||
/*
|
||||
* fnstenv masks all exceptions, so we need to restore the
|
||||
* control word to avoid this side effect.
|
||||
*/
|
||||
__fldcw(envp->__x87.__control);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feholdexcept(fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__stmxcsr(&mxcsr);
|
||||
__fnstenv(&envp->__x87);
|
||||
__fnclex();
|
||||
envp->__mxcsr = mxcsr;
|
||||
mxcsr &= ~FE_ALL_EXCEPT;
|
||||
mxcsr |= FE_ALL_EXCEPT << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern inline int fesetenv(const fenv_t *__envp);
|
||||
|
||||
int
|
||||
feupdateenv(const fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
__uint16_t status;
|
||||
|
||||
__fnstsw(&status);
|
||||
__stmxcsr(&mxcsr);
|
||||
fesetenv(envp);
|
||||
feraiseexcept((mxcsr | status) & FE_ALL_EXCEPT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
__feenableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
__stmxcsr(&mxcsr);
|
||||
omask = ~(control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control &= ~mask;
|
||||
__fldcw(control);
|
||||
mxcsr &= ~(mask << _SSE_EMASK_SHIFT);
|
||||
__ldmxcsr(mxcsr);
|
||||
return (omask);
|
||||
}
|
||||
|
||||
int
|
||||
__fedisableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
__stmxcsr(&mxcsr);
|
||||
omask = ~(control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control |= mask;
|
||||
__fldcw(control);
|
||||
mxcsr |= mask << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
return (omask);
|
||||
}
|
||||
|
||||
__weak_reference(__feenableexcept, feenableexcept);
|
||||
__weak_reference(__fedisableexcept, fedisableexcept);
|
|
@ -0,0 +1,6 @@
|
|||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
/* sizeof(long) == sizeof(long long) */
|
||||
#define fn llrint
|
||||
#include "s_lrint.S"
|
|
@ -0,0 +1,6 @@
|
|||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
/* sizeof(long) == sizeof(long long) */
|
||||
#define fn llrintf
|
||||
#include "s_lrintf.S"
|
|
@ -0,0 +1,37 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(llrintl)
|
||||
fldt 8(%rsp)
|
||||
subq $8,%rsp
|
||||
fistpll (%rsp)
|
||||
popq %rax
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(logbl)
|
||||
fldt 8(%rsp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef fn
|
||||
__FBSDID("$FreeBSD$")
|
||||
#define fn lrint
|
||||
#endif
|
||||
|
||||
ENTRY(fn)
|
||||
cvtsd2si %xmm0, %rax
|
||||
ret
|
||||
END(fn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
#ifndef fn
|
||||
__FBSDID("$FreeBSD$")
|
||||
#define fn lrintf
|
||||
#endif
|
||||
|
||||
ENTRY(fn)
|
||||
cvtss2si %xmm0, %rax
|
||||
ret
|
||||
END(fn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,37 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(lrintl)
|
||||
fldt 8(%rsp)
|
||||
subq $8,%rsp
|
||||
fistpll (%rsp)
|
||||
popq %rax
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,68 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(remquo)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movsd %xmm1,-16(%rsp)
|
||||
fldl -16(%rsp)
|
||||
fldl -8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
btw $10,%ax
|
||||
jc 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl -12(%rsp),%ecx
|
||||
xorl -4(%rsp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl %eax,(%rdi)
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
ret
|
||||
END(remquo)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,68 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(remquof)
|
||||
movss %xmm0,-4(%rsp)
|
||||
movss %xmm1,-8(%rsp)
|
||||
flds -8(%rsp)
|
||||
flds -4(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
btw $10,%ax
|
||||
jc 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl -8(%rsp),%ecx
|
||||
xorl -4(%rsp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl %eax,(%rdi)
|
||||
fstps -4(%rsp)
|
||||
movss -4(%rsp),%xmm0
|
||||
ret
|
||||
END(remquof)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,64 @@
|
|||
/*-
|
||||
* Copyright (c) 2005-2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(remquol)
|
||||
fldt 24(%rsp)
|
||||
fldt 8(%rsp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
btw $10,%ax
|
||||
jc 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 32(%rsp),%ecx
|
||||
xorl 16(%rsp),%ecx
|
||||
movsx %cx,%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl %eax,(%rdi)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
ENTRY(rintl)
|
||||
fldt 8(%rsp)
|
||||
frndint
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,42 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(scalbn)
|
||||
movsd %xmm0,-8(%rsp)
|
||||
movl %edi,-12(%rsp)
|
||||
fildl -12(%rsp)
|
||||
fldl -8(%rsp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
fstpl -8(%rsp)
|
||||
movsd -8(%rsp),%xmm0
|
||||
ret
|
||||
END(scalbn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,45 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(scalbnf)
|
||||
movss %xmm0,-8(%rsp)
|
||||
movl %edi,-4(%rsp)
|
||||
fildl -4(%rsp)
|
||||
flds -8(%rsp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
fstps -8(%rsp)
|
||||
movss -8(%rsp),%xmm0
|
||||
ret
|
||||
END(scalbnf)
|
||||
|
||||
.globl CNAME(ldexpf)
|
||||
.set CNAME(ldexpf),CNAME(scalbnf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */
|
||||
|
||||
ENTRY(scalbnl)
|
||||
movl %edi,-4(%rsp)
|
||||
fildl -4(%rsp)
|
||||
fldt 8(%rsp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(scalbnl)
|
||||
|
||||
.globl CNAME(ldexpl)
|
||||
.set CNAME(ldexpl),CNAME(scalbnl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,10 @@
|
|||
# $FreeBSD$
|
||||
|
||||
LDBL_PREC = 53
|
||||
SYM_MAPS += ${.CURDIR}/arm/Symbol.map
|
||||
|
||||
.if ${MACHINE_ARCH:Marmv6*} && defined(CPUTYPE) && ${CPUTYPE:M*soft*} != ""
|
||||
ARCH_SRCS = fenv-softfp.c fenv-vfp.c
|
||||
.endif
|
||||
|
||||
CFLAGS.fenv-vfp.c= -mfpu=vfp -mfloat-abi=softfp
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
FBSD_1.0 {
|
||||
};
|
||||
|
||||
FBSD_1.3 {
|
||||
fesetexceptflag;
|
||||
feraiseexcept;
|
||||
fegetenv;
|
||||
feholdexcept;
|
||||
feupdateenv;
|
||||
feenableexcept;
|
||||
fedisableexcept;
|
||||
fegetexcept;
|
||||
};
|
|
@ -0,0 +1,53 @@
|
|||
/*-
|
||||
* Copyright (c) 2013 Andrew Turner <andrew@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifdef _FENV_MANGLE_H_
|
||||
#error Only include fenv-mangle.h once
|
||||
#endif
|
||||
|
||||
#define _FENV_MANGLE_H_
|
||||
|
||||
#ifndef FENV_MANGLE
|
||||
#error FENV_MANGLE is undefined
|
||||
#endif
|
||||
|
||||
#define feclearexcept FENV_MANGLE(feclearexcept)
|
||||
#define fegetexceptflag FENV_MANGLE(fegetexceptflag)
|
||||
#define fesetexceptflag FENV_MANGLE(fesetexceptflag)
|
||||
#define feraiseexcept FENV_MANGLE(feraiseexcept)
|
||||
#define fetestexcept FENV_MANGLE(fetestexcept)
|
||||
#define fegetround FENV_MANGLE(fegetround)
|
||||
#define fesetround FENV_MANGLE(fesetround)
|
||||
#define fegetenv FENV_MANGLE(fegetenv)
|
||||
#define feholdexcept FENV_MANGLE(feholdexcept)
|
||||
#define fesetenv FENV_MANGLE(fesetenv)
|
||||
#define feupdateenv FENV_MANGLE(feupdateenv)
|
||||
#define feenableexcept FENV_MANGLE(feenableexcept)
|
||||
#define fedisableexcept FENV_MANGLE(fedisableexcept)
|
||||
#define fegetexcept FENV_MANGLE(fegetexcept)
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/*-
|
||||
* Copyright (c) 2013 Andrew Turner <andrew@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#define FENV_MANGLE(x) __softfp_ ##x
|
||||
#include "fenv-mangle.h"
|
||||
#include "fenv.c"
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/*-
|
||||
* Copyright (c) 2013 Andrew Turner <andrew@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#define FENV_MANGLE(x) __vfp_ ##x
|
||||
#include "fenv-mangle.h"
|
||||
#ifndef __ARM_PCS_VFP
|
||||
#define __ARM_PCS_VFP 1
|
||||
#endif
|
||||
#include "fenv.c"
|
||||
|
|
@ -0,0 +1,317 @@
|
|||
/*-
|
||||
* Copyright (c) 2004 David Schultz <das@FreeBSD.ORG>
|
||||
* Copyright (c) 2013 Andrew Turner <andrew@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#define __fenv_static
|
||||
#include "fenv.h"
|
||||
|
||||
#include <machine/acle-compat.h>
|
||||
|
||||
#if __ARM_ARCH >= 6
|
||||
#define FENV_ARMv6
|
||||
#endif
|
||||
|
||||
/* When SOFTFP_ABI is defined we are using the softfp ABI. */
|
||||
#if defined(__VFP_FP__) && !defined(__ARM_PCS_VFP)
|
||||
#define SOFTFP_ABI
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef FENV_MANGLE
|
||||
/*
|
||||
* Hopefully the system ID byte is immutable, so it's valid to use
|
||||
* this as a default environment.
|
||||
*/
|
||||
const fenv_t __fe_dfl_env = 0;
|
||||
#endif
|
||||
|
||||
|
||||
/* If this is a non-mangled softfp version special processing is required */
|
||||
#if defined(FENV_MANGLE) || !defined(SOFTFP_ABI) || !defined(FENV_ARMv6)
|
||||
|
||||
/*
|
||||
* The following macros map between the softfloat emulator's flags and
|
||||
* the hardware's FPSR. The hardware this file was written for doesn't
|
||||
* have rounding control bits, so we stick those in the system ID byte.
|
||||
*/
|
||||
#ifndef __ARM_PCS_VFP
|
||||
#define __set_env(env, flags, mask, rnd) env = ((flags) \
|
||||
| (mask)<<_FPUSW_SHIFT \
|
||||
| (rnd) << 24)
|
||||
#define __env_flags(env) ((env) & FE_ALL_EXCEPT)
|
||||
#define __env_mask(env) (((env) >> _FPUSW_SHIFT) \
|
||||
& FE_ALL_EXCEPT)
|
||||
#define __env_round(env) (((env) >> 24) & _ROUND_MASK)
|
||||
#include "fenv-softfloat.h"
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC_GNU_INLINE__
|
||||
#error "This file must be compiled with C99 'inline' semantics"
|
||||
#endif
|
||||
|
||||
extern inline int feclearexcept(int __excepts);
|
||||
extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
extern inline int feraiseexcept(int __excepts);
|
||||
extern inline int fetestexcept(int __excepts);
|
||||
extern inline int fegetround(void);
|
||||
extern inline int fesetround(int __round);
|
||||
extern inline int fegetenv(fenv_t *__envp);
|
||||
extern inline int feholdexcept(fenv_t *__envp);
|
||||
extern inline int fesetenv(const fenv_t *__envp);
|
||||
extern inline int feupdateenv(const fenv_t *__envp);
|
||||
extern inline int feenableexcept(int __mask);
|
||||
extern inline int fedisableexcept(int __mask);
|
||||
extern inline int fegetexcept(void);
|
||||
|
||||
#else /* !FENV_MANGLE && SOFTFP_ABI */
|
||||
/* Set by libc when the VFP unit is enabled */
|
||||
extern int _libc_arm_fpu_present;
|
||||
|
||||
int __softfp_feclearexcept(int __excepts);
|
||||
int __softfp_fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
int __softfp_fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
int __softfp_feraiseexcept(int __excepts);
|
||||
int __softfp_fetestexcept(int __excepts);
|
||||
int __softfp_fegetround(void);
|
||||
int __softfp_fesetround(int __round);
|
||||
int __softfp_fegetenv(fenv_t *__envp);
|
||||
int __softfp_feholdexcept(fenv_t *__envp);
|
||||
int __softfp_fesetenv(const fenv_t *__envp);
|
||||
int __softfp_feupdateenv(const fenv_t *__envp);
|
||||
int __softfp_feenableexcept(int __mask);
|
||||
int __softfp_fedisableexcept(int __mask);
|
||||
int __softfp_fegetexcept(void);
|
||||
|
||||
int __vfp_feclearexcept(int __excepts);
|
||||
int __vfp_fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
int __vfp_fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
int __vfp_feraiseexcept(int __excepts);
|
||||
int __vfp_fetestexcept(int __excepts);
|
||||
int __vfp_fegetround(void);
|
||||
int __vfp_fesetround(int __round);
|
||||
int __vfp_fegetenv(fenv_t *__envp);
|
||||
int __vfp_feholdexcept(fenv_t *__envp);
|
||||
int __vfp_fesetenv(const fenv_t *__envp);
|
||||
int __vfp_feupdateenv(const fenv_t *__envp);
|
||||
int __vfp_feenableexcept(int __mask);
|
||||
int __vfp_fedisableexcept(int __mask);
|
||||
int __vfp_fegetexcept(void);
|
||||
|
||||
static int
|
||||
__softfp_round_to_vfp(int round)
|
||||
{
|
||||
|
||||
switch (round) {
|
||||
case FE_TONEAREST:
|
||||
default:
|
||||
return VFP_FE_TONEAREST;
|
||||
case FE_TOWARDZERO:
|
||||
return VFP_FE_TOWARDZERO;
|
||||
case FE_UPWARD:
|
||||
return VFP_FE_UPWARD;
|
||||
case FE_DOWNWARD:
|
||||
return VFP_FE_DOWNWARD;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
__softfp_round_from_vfp(int round)
|
||||
{
|
||||
|
||||
switch (round) {
|
||||
case VFP_FE_TONEAREST:
|
||||
default:
|
||||
return FE_TONEAREST;
|
||||
case VFP_FE_TOWARDZERO:
|
||||
return FE_TOWARDZERO;
|
||||
case VFP_FE_UPWARD:
|
||||
return FE_UPWARD;
|
||||
case VFP_FE_DOWNWARD:
|
||||
return FE_DOWNWARD;
|
||||
}
|
||||
}
|
||||
|
||||
int feclearexcept(int __excepts)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_feclearexcept(__excepts);
|
||||
__softfp_feclearexcept(__excepts);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fegetexceptflag(fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
fexcept_t __vfp_flagp;
|
||||
|
||||
__vfp_flagp = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_fegetexceptflag(&__vfp_flagp, __excepts);
|
||||
__softfp_fegetexceptflag(__flagp, __excepts);
|
||||
|
||||
*__flagp |= __vfp_flagp;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fesetexceptflag(const fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_fesetexceptflag(__flagp, __excepts);
|
||||
__softfp_fesetexceptflag(__flagp, __excepts);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int feraiseexcept(int __excepts)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_feraiseexcept(__excepts);
|
||||
__softfp_feraiseexcept(__excepts);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fetestexcept(int __excepts)
|
||||
{
|
||||
int __got_excepts;
|
||||
|
||||
__got_excepts = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__got_excepts = __vfp_fetestexcept(__excepts);
|
||||
__got_excepts |= __softfp_fetestexcept(__excepts);
|
||||
|
||||
return (__got_excepts);
|
||||
}
|
||||
|
||||
int fegetround(void)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
return __softfp_round_from_vfp(__vfp_fegetround());
|
||||
return __softfp_fegetround();
|
||||
}
|
||||
|
||||
int fesetround(int __round)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_fesetround(__softfp_round_to_vfp(__round));
|
||||
__softfp_fesetround(__round);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fegetenv(fenv_t *__envp)
|
||||
{
|
||||
fenv_t __vfp_envp;
|
||||
|
||||
__vfp_envp = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_fegetenv(&__vfp_envp);
|
||||
__softfp_fegetenv(__envp);
|
||||
*__envp |= __vfp_envp;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int feholdexcept(fenv_t *__envp)
|
||||
{
|
||||
fenv_t __vfp_envp;
|
||||
|
||||
__vfp_envp = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_feholdexcept(&__vfp_envp);
|
||||
__softfp_feholdexcept(__envp);
|
||||
*__envp |= __vfp_envp;
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int fesetenv(const fenv_t *__envp)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_fesetenv(__envp);
|
||||
__softfp_fesetenv(__envp);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int feupdateenv(const fenv_t *__envp)
|
||||
{
|
||||
|
||||
if (_libc_arm_fpu_present)
|
||||
__vfp_feupdateenv(__envp);
|
||||
__softfp_feupdateenv(__envp);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int feenableexcept(int __mask)
|
||||
{
|
||||
int __unmasked;
|
||||
|
||||
__unmasked = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__unmasked = __vfp_feenableexcept(__mask);
|
||||
__unmasked |= __softfp_feenableexcept(__mask);
|
||||
|
||||
return (__unmasked);
|
||||
}
|
||||
|
||||
int fedisableexcept(int __mask)
|
||||
{
|
||||
int __unmasked;
|
||||
|
||||
__unmasked = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__unmasked = __vfp_fedisableexcept(__mask);
|
||||
__unmasked |= __softfp_fedisableexcept(__mask);
|
||||
|
||||
return (__unmasked);
|
||||
}
|
||||
|
||||
int fegetexcept(void)
|
||||
{
|
||||
int __unmasked;
|
||||
|
||||
__unmasked = 0;
|
||||
if (_libc_arm_fpu_present)
|
||||
__unmasked = __vfp_fegetexcept();
|
||||
__unmasked |= __softfp_fegetexcept();
|
||||
|
||||
return (__unmasked);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,267 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _FENV_H_
|
||||
#define _FENV_H_
|
||||
|
||||
#include <sys/_types.h>
|
||||
|
||||
#ifndef __fenv_static
|
||||
#define __fenv_static static
|
||||
#endif
|
||||
|
||||
typedef __uint32_t fenv_t;
|
||||
typedef __uint32_t fexcept_t;
|
||||
|
||||
/* Exception flags */
|
||||
#define FE_INVALID 0x0001
|
||||
#define FE_DIVBYZERO 0x0002
|
||||
#define FE_OVERFLOW 0x0004
|
||||
#define FE_UNDERFLOW 0x0008
|
||||
#define FE_INEXACT 0x0010
|
||||
#ifdef __ARM_PCS_VFP
|
||||
#define FE_DENORMAL 0x0080
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_DENORMAL)
|
||||
#else
|
||||
#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \
|
||||
FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW)
|
||||
#endif
|
||||
|
||||
/* Rounding modes */
|
||||
#define VFP_FE_TONEAREST 0x00000000
|
||||
#define VFP_FE_UPWARD 0x00400000
|
||||
#define VFP_FE_DOWNWARD 0x00800000
|
||||
#define VFP_FE_TOWARDZERO 0x00c00000
|
||||
|
||||
#ifdef __ARM_PCS_VFP
|
||||
#define FE_TONEAREST VFP_FE_TONEAREST
|
||||
#define FE_UPWARD VFP_FE_UPWARD
|
||||
#define FE_DOWNWARD VFP_FE_DOWNWARD
|
||||
#define FE_TOWARDZERO VFP_FE_TOWARDZERO
|
||||
#else
|
||||
#define FE_TONEAREST 0x0000
|
||||
#define FE_TOWARDZERO 0x0001
|
||||
#define FE_UPWARD 0x0002
|
||||
#define FE_DOWNWARD 0x0003
|
||||
#endif
|
||||
#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \
|
||||
FE_UPWARD | FE_TOWARDZERO)
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Default floating-point environment */
|
||||
extern const fenv_t __fe_dfl_env;
|
||||
#define FE_DFL_ENV (&__fe_dfl_env)
|
||||
|
||||
/* We need to be able to map status flag positions to mask flag positions */
|
||||
#ifndef __ARM_PCS_VFP
|
||||
#define _FPUSW_SHIFT 16
|
||||
#define _ENABLE_MASK (FE_ALL_EXCEPT << _FPUSW_SHIFT)
|
||||
#endif
|
||||
|
||||
#ifndef __ARM_PCS_VFP
|
||||
|
||||
int feclearexcept(int __excepts);
|
||||
int fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
|
||||
int feraiseexcept(int __excepts);
|
||||
int fetestexcept(int __excepts);
|
||||
int fegetround(void);
|
||||
int fesetround(int __round);
|
||||
int fegetenv(fenv_t *__envp);
|
||||
int feholdexcept(fenv_t *__envp);
|
||||
int fesetenv(const fenv_t *__envp);
|
||||
int feupdateenv(const fenv_t *__envp);
|
||||
#if __BSD_VISIBLE
|
||||
int feenableexcept(int __mask);
|
||||
int fedisableexcept(int __mask);
|
||||
int fegetexcept(void);
|
||||
#endif
|
||||
|
||||
#else /* __ARM_PCS_VFP */
|
||||
|
||||
#define vmrs_fpscr(__r) __asm __volatile("vmrs %0, fpscr" : "=&r"(__r))
|
||||
#define vmsr_fpscr(__r) __asm __volatile("vmsr fpscr, %0" : : "r"(__r))
|
||||
|
||||
#define _FPU_MASK_SHIFT 8
|
||||
|
||||
__fenv_static inline int
|
||||
feclearexcept(int __excepts)
|
||||
{
|
||||
fexcept_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
__fpsr &= ~__excepts;
|
||||
vmsr_fpscr(__fpsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetexceptflag(fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
fexcept_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
*__flagp = __fpsr & __excepts;
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fesetexceptflag(const fexcept_t *__flagp, int __excepts)
|
||||
{
|
||||
fexcept_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
__fpsr &= ~__excepts;
|
||||
__fpsr |= *__flagp & __excepts;
|
||||
vmsr_fpscr(__fpsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
feraiseexcept(int __excepts)
|
||||
{
|
||||
fexcept_t __ex = __excepts;
|
||||
|
||||
fesetexceptflag(&__ex, __excepts); /* XXX */
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fetestexcept(int __excepts)
|
||||
{
|
||||
fexcept_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
return (__fpsr & __excepts);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetround(void)
|
||||
{
|
||||
fenv_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
return (__fpsr & _ROUND_MASK);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fesetround(int __round)
|
||||
{
|
||||
fenv_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
__fpsr &= ~(_ROUND_MASK);
|
||||
__fpsr |= __round;
|
||||
vmsr_fpscr(__fpsr);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetenv(fenv_t *__envp)
|
||||
{
|
||||
|
||||
vmrs_fpscr(*__envp);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
feholdexcept(fenv_t *__envp)
|
||||
{
|
||||
fenv_t __env;
|
||||
|
||||
vmrs_fpscr(__env);
|
||||
*__envp = __env;
|
||||
__env &= ~(FE_ALL_EXCEPT);
|
||||
vmsr_fpscr(__env);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fesetenv(const fenv_t *__envp)
|
||||
{
|
||||
|
||||
vmsr_fpscr(*__envp);
|
||||
return (0);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
feupdateenv(const fenv_t *__envp)
|
||||
{
|
||||
fexcept_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
vmsr_fpscr(*__envp);
|
||||
feraiseexcept(__fpsr & FE_ALL_EXCEPT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if __BSD_VISIBLE
|
||||
|
||||
/* We currently provide no external definitions of the functions below. */
|
||||
|
||||
__fenv_static inline int
|
||||
feenableexcept(int __mask)
|
||||
{
|
||||
fenv_t __old_fpsr, __new_fpsr;
|
||||
|
||||
vmrs_fpscr(__old_fpsr);
|
||||
__new_fpsr = __old_fpsr |
|
||||
((__mask & FE_ALL_EXCEPT) << _FPU_MASK_SHIFT);
|
||||
vmsr_fpscr(__new_fpsr);
|
||||
return ((__old_fpsr >> _FPU_MASK_SHIFT) & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fedisableexcept(int __mask)
|
||||
{
|
||||
fenv_t __old_fpsr, __new_fpsr;
|
||||
|
||||
vmrs_fpscr(__old_fpsr);
|
||||
__new_fpsr = __old_fpsr &
|
||||
~((__mask & FE_ALL_EXCEPT) << _FPU_MASK_SHIFT);
|
||||
vmsr_fpscr(__new_fpsr);
|
||||
return ((__old_fpsr >> _FPU_MASK_SHIFT) & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
__fenv_static inline int
|
||||
fegetexcept(void)
|
||||
{
|
||||
fenv_t __fpsr;
|
||||
|
||||
vmrs_fpscr(__fpsr);
|
||||
return (__fpsr & FE_ALL_EXCEPT);
|
||||
}
|
||||
|
||||
#endif /* __BSD_VISIBLE */
|
||||
|
||||
#endif /* __ARM_PCS_VFP */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* !_FENV_H_ */
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* Copyright (c) 1985, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* @(#)exp.c 8.1 (Berkeley) 6/4/93 */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
|
||||
/* EXP(X)
|
||||
* RETURN THE EXPONENTIAL OF X
|
||||
* DOUBLE PRECISION (IEEE 53 bits, VAX D FORMAT 56 BITS)
|
||||
* CODED IN C BY K.C. NG, 1/19/85;
|
||||
* REVISED BY K.C. NG on 2/6/85, 2/15/85, 3/7/85, 3/24/85, 4/16/85, 6/14/86.
|
||||
*
|
||||
* Required system supported functions:
|
||||
* scalb(x,n)
|
||||
* copysign(x,y)
|
||||
* finite(x)
|
||||
*
|
||||
* Method:
|
||||
* 1. Argument Reduction: given the input x, find r and integer k such
|
||||
* that
|
||||
* x = k*ln2 + r, |r| <= 0.5*ln2 .
|
||||
* r will be represented as r := z+c for better accuracy.
|
||||
*
|
||||
* 2. Compute exp(r) by
|
||||
*
|
||||
* exp(r) = 1 + r + r*R1/(2-R1),
|
||||
* where
|
||||
* R1 = x - x^2*(p1+x^2*(p2+x^2*(p3+x^2*(p4+p5*x^2)))).
|
||||
*
|
||||
* 3. exp(x) = 2^k * exp(r) .
|
||||
*
|
||||
* Special cases:
|
||||
* exp(INF) is INF, exp(NaN) is NaN;
|
||||
* exp(-INF)= 0;
|
||||
* for finite argument, only exp(0)=1 is exact.
|
||||
*
|
||||
* Accuracy:
|
||||
* exp(x) returns the exponential of x nearly rounded. In a test run
|
||||
* with 1,156,000 random arguments on a VAX, the maximum observed
|
||||
* error was 0.869 ulps (units in the last place).
|
||||
*/
|
||||
|
||||
#include "mathimpl.h"
|
||||
|
||||
static const double p1 = 0x1.555555555553ep-3;
|
||||
static const double p2 = -0x1.6c16c16bebd93p-9;
|
||||
static const double p3 = 0x1.1566aaf25de2cp-14;
|
||||
static const double p4 = -0x1.bbd41c5d26bf1p-20;
|
||||
static const double p5 = 0x1.6376972bea4d0p-25;
|
||||
static const double ln2hi = 0x1.62e42fee00000p-1;
|
||||
static const double ln2lo = 0x1.a39ef35793c76p-33;
|
||||
static const double lnhuge = 0x1.6602b15b7ecf2p9;
|
||||
static const double lntiny = -0x1.77af8ebeae354p9;
|
||||
static const double invln2 = 0x1.71547652b82fep0;
|
||||
|
||||
#if 0
|
||||
double exp(x)
|
||||
double x;
|
||||
{
|
||||
double z,hi,lo,c;
|
||||
int k;
|
||||
|
||||
#if !defined(vax)&&!defined(tahoe)
|
||||
if(x!=x) return(x); /* x is NaN */
|
||||
#endif /* !defined(vax)&&!defined(tahoe) */
|
||||
if( x <= lnhuge ) {
|
||||
if( x >= lntiny ) {
|
||||
|
||||
/* argument reduction : x --> x - k*ln2 */
|
||||
|
||||
k=invln2*x+copysign(0.5,x); /* k=NINT(x/ln2) */
|
||||
|
||||
/* express x-k*ln2 as hi-lo and let x=hi-lo rounded */
|
||||
|
||||
hi=x-k*ln2hi;
|
||||
x=hi-(lo=k*ln2lo);
|
||||
|
||||
/* return 2^k*[1+x+x*c/(2+c)] */
|
||||
z=x*x;
|
||||
c= x - z*(p1+z*(p2+z*(p3+z*(p4+z*p5))));
|
||||
return scalb(1.0+(hi-(lo-(x*c)/(2.0-c))),k);
|
||||
|
||||
}
|
||||
/* end of x > lntiny */
|
||||
|
||||
else
|
||||
/* exp(-big#) underflows to zero */
|
||||
if(finite(x)) return(scalb(1.0,-5000));
|
||||
|
||||
/* exp(-INF) is zero */
|
||||
else return(0.0);
|
||||
}
|
||||
/* end of x < lnhuge */
|
||||
|
||||
else
|
||||
/* exp(INF) is INF, exp(+big#) overflows to INF */
|
||||
return( finite(x) ? scalb(1.0,5000) : x);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* returns exp(r = x + c) for |c| < |x| with no overlap. */
|
||||
|
||||
double __exp__D(x, c)
|
||||
double x, c;
|
||||
{
|
||||
double z,hi,lo;
|
||||
int k;
|
||||
|
||||
if (x != x) /* x is NaN */
|
||||
return(x);
|
||||
if ( x <= lnhuge ) {
|
||||
if ( x >= lntiny ) {
|
||||
|
||||
/* argument reduction : x --> x - k*ln2 */
|
||||
z = invln2*x;
|
||||
k = z + copysign(.5, x);
|
||||
|
||||
/* express (x+c)-k*ln2 as hi-lo and let x=hi-lo rounded */
|
||||
|
||||
hi=(x-k*ln2hi); /* Exact. */
|
||||
x= hi - (lo = k*ln2lo-c);
|
||||
/* return 2^k*[1+x+x*c/(2+c)] */
|
||||
z=x*x;
|
||||
c= x - z*(p1+z*(p2+z*(p3+z*(p4+z*p5))));
|
||||
c = (x*c)/(2.0-c);
|
||||
|
||||
return scalb(1.+(hi-(lo - c)), k);
|
||||
}
|
||||
/* end of x > lntiny */
|
||||
|
||||
else
|
||||
/* exp(-big#) underflows to zero */
|
||||
if(finite(x)) return(scalb(1.0,-5000));
|
||||
|
||||
/* exp(-INF) is zero */
|
||||
else return(0.0);
|
||||
}
|
||||
/* end of x < lnhuge */
|
||||
|
||||
else
|
||||
/* exp(INF) is INF, exp(+big#) overflows to INF */
|
||||
return( finite(x) ? scalb(1.0,5000) : x);
|
||||
}
|
|
@ -0,0 +1,471 @@
|
|||
/*
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* @(#)log.c 8.2 (Berkeley) 11/30/93 */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <math.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "mathimpl.h"
|
||||
|
||||
/* Table-driven natural logarithm.
|
||||
*
|
||||
* This code was derived, with minor modifications, from:
|
||||
* Peter Tang, "Table-Driven Implementation of the
|
||||
* Logarithm in IEEE Floating-Point arithmetic." ACM Trans.
|
||||
* Math Software, vol 16. no 4, pp 378-400, Dec 1990).
|
||||
*
|
||||
* Calculates log(2^m*F*(1+f/F)), |f/j| <= 1/256,
|
||||
* where F = j/128 for j an integer in [0, 128].
|
||||
*
|
||||
* log(2^m) = log2_hi*m + log2_tail*m
|
||||
* since m is an integer, the dominant term is exact.
|
||||
* m has at most 10 digits (for subnormal numbers),
|
||||
* and log2_hi has 11 trailing zero bits.
|
||||
*
|
||||
* log(F) = logF_hi[j] + logF_lo[j] is in tabular form in log_table.h
|
||||
* logF_hi[] + 512 is exact.
|
||||
*
|
||||
* log(1+f/F) = 2*f/(2*F + f) + 1/12 * (2*f/(2*F + f))**3 + ...
|
||||
* the leading term is calculated to extra precision in two
|
||||
* parts, the larger of which adds exactly to the dominant
|
||||
* m and F terms.
|
||||
* There are two cases:
|
||||
* 1. when m, j are non-zero (m | j), use absolute
|
||||
* precision for the leading term.
|
||||
* 2. when m = j = 0, |1-x| < 1/256, and log(x) ~= (x-1).
|
||||
* In this case, use a relative precision of 24 bits.
|
||||
* (This is done differently in the original paper)
|
||||
*
|
||||
* Special cases:
|
||||
* 0 return signalling -Inf
|
||||
* neg return signalling NaN
|
||||
* +Inf return +Inf
|
||||
*/
|
||||
|
||||
#define N 128
|
||||
|
||||
/* Table of log(Fj) = logF_head[j] + logF_tail[j], for Fj = 1+j/128.
|
||||
* Used for generation of extend precision logarithms.
|
||||
* The constant 35184372088832 is 2^45, so the divide is exact.
|
||||
* It ensures correct reading of logF_head, even for inaccurate
|
||||
* decimal-to-binary conversion routines. (Everybody gets the
|
||||
* right answer for integers less than 2^53.)
|
||||
* Values for log(F) were generated using error < 10^-57 absolute
|
||||
* with the bc -l package.
|
||||
*/
|
||||
static double A1 = .08333333333333178827;
|
||||
static double A2 = .01250000000377174923;
|
||||
static double A3 = .002232139987919447809;
|
||||
static double A4 = .0004348877777076145742;
|
||||
|
||||
static double logF_head[N+1] = {
|
||||
0.,
|
||||
.007782140442060381246,
|
||||
.015504186535963526694,
|
||||
.023167059281547608406,
|
||||
.030771658666765233647,
|
||||
.038318864302141264488,
|
||||
.045809536031242714670,
|
||||
.053244514518837604555,
|
||||
.060624621816486978786,
|
||||
.067950661908525944454,
|
||||
.075223421237524235039,
|
||||
.082443669210988446138,
|
||||
.089612158689760690322,
|
||||
.096729626458454731618,
|
||||
.103796793681567578460,
|
||||
.110814366340264314203,
|
||||
.117783035656430001836,
|
||||
.124703478501032805070,
|
||||
.131576357788617315236,
|
||||
.138402322859292326029,
|
||||
.145182009844575077295,
|
||||
.151916042025732167530,
|
||||
.158605030176659056451,
|
||||
.165249572895390883786,
|
||||
.171850256926518341060,
|
||||
.178407657472689606947,
|
||||
.184922338493834104156,
|
||||
.191394852999565046047,
|
||||
.197825743329758552135,
|
||||
.204215541428766300668,
|
||||
.210564769107350002741,
|
||||
.216873938300523150246,
|
||||
.223143551314024080056,
|
||||
.229374101064877322642,
|
||||
.235566071312860003672,
|
||||
.241719936886966024758,
|
||||
.247836163904594286577,
|
||||
.253915209980732470285,
|
||||
.259957524436686071567,
|
||||
.265963548496984003577,
|
||||
.271933715484010463114,
|
||||
.277868451003087102435,
|
||||
.283768173130738432519,
|
||||
.289633292582948342896,
|
||||
.295464212893421063199,
|
||||
.301261330578199704177,
|
||||
.307025035294827830512,
|
||||
.312755710004239517729,
|
||||
.318453731118097493890,
|
||||
.324119468654316733591,
|
||||
.329753286372579168528,
|
||||
.335355541920762334484,
|
||||
.340926586970454081892,
|
||||
.346466767346100823488,
|
||||
.351976423156884266063,
|
||||
.357455888922231679316,
|
||||
.362905493689140712376,
|
||||
.368325561158599157352,
|
||||
.373716409793814818840,
|
||||
.379078352934811846353,
|
||||
.384411698910298582632,
|
||||
.389716751140440464951,
|
||||
.394993808240542421117,
|
||||
.400243164127459749579,
|
||||
.405465108107819105498,
|
||||
.410659924985338875558,
|
||||
.415827895143593195825,
|
||||
.420969294644237379543,
|
||||
.426084395310681429691,
|
||||
.431173464818130014464,
|
||||
.436236766774527495726,
|
||||
.441274560805140936281,
|
||||
.446287102628048160113,
|
||||
.451274644139630254358,
|
||||
.456237433481874177232,
|
||||
.461175715122408291790,
|
||||
.466089729924533457960,
|
||||
.470979715219073113985,
|
||||
.475845904869856894947,
|
||||
.480688529345570714212,
|
||||
.485507815781602403149,
|
||||
.490303988045525329653,
|
||||
.495077266798034543171,
|
||||
.499827869556611403822,
|
||||
.504556010751912253908,
|
||||
.509261901790523552335,
|
||||
.513945751101346104405,
|
||||
.518607764208354637958,
|
||||
.523248143765158602036,
|
||||
.527867089620485785417,
|
||||
.532464798869114019908,
|
||||
.537041465897345915436,
|
||||
.541597282432121573947,
|
||||
.546132437597407260909,
|
||||
.550647117952394182793,
|
||||
.555141507540611200965,
|
||||
.559615787935399566777,
|
||||
.564070138285387656651,
|
||||
.568504735352689749561,
|
||||
.572919753562018740922,
|
||||
.577315365035246941260,
|
||||
.581691739635061821900,
|
||||
.586049045003164792433,
|
||||
.590387446602107957005,
|
||||
.594707107746216934174,
|
||||
.599008189645246602594,
|
||||
.603290851438941899687,
|
||||
.607555250224322662688,
|
||||
.611801541106615331955,
|
||||
.616029877215623855590,
|
||||
.620240409751204424537,
|
||||
.624433288012369303032,
|
||||
.628608659422752680256,
|
||||
.632766669570628437213,
|
||||
.636907462236194987781,
|
||||
.641031179420679109171,
|
||||
.645137961373620782978,
|
||||
.649227946625615004450,
|
||||
.653301272011958644725,
|
||||
.657358072709030238911,
|
||||
.661398482245203922502,
|
||||
.665422632544505177065,
|
||||
.669430653942981734871,
|
||||
.673422675212350441142,
|
||||
.677398823590920073911,
|
||||
.681359224807238206267,
|
||||
.685304003098281100392,
|
||||
.689233281238557538017,
|
||||
.693147180560117703862
|
||||
};
|
||||
|
||||
static double logF_tail[N+1] = {
|
||||
0.,
|
||||
-.00000000000000543229938420049,
|
||||
.00000000000000172745674997061,
|
||||
-.00000000000001323017818229233,
|
||||
-.00000000000001154527628289872,
|
||||
-.00000000000000466529469958300,
|
||||
.00000000000005148849572685810,
|
||||
-.00000000000002532168943117445,
|
||||
-.00000000000005213620639136504,
|
||||
-.00000000000001819506003016881,
|
||||
.00000000000006329065958724544,
|
||||
.00000000000008614512936087814,
|
||||
-.00000000000007355770219435028,
|
||||
.00000000000009638067658552277,
|
||||
.00000000000007598636597194141,
|
||||
.00000000000002579999128306990,
|
||||
-.00000000000004654729747598444,
|
||||
-.00000000000007556920687451336,
|
||||
.00000000000010195735223708472,
|
||||
-.00000000000017319034406422306,
|
||||
-.00000000000007718001336828098,
|
||||
.00000000000010980754099855238,
|
||||
-.00000000000002047235780046195,
|
||||
-.00000000000008372091099235912,
|
||||
.00000000000014088127937111135,
|
||||
.00000000000012869017157588257,
|
||||
.00000000000017788850778198106,
|
||||
.00000000000006440856150696891,
|
||||
.00000000000016132822667240822,
|
||||
-.00000000000007540916511956188,
|
||||
-.00000000000000036507188831790,
|
||||
.00000000000009120937249914984,
|
||||
.00000000000018567570959796010,
|
||||
-.00000000000003149265065191483,
|
||||
-.00000000000009309459495196889,
|
||||
.00000000000017914338601329117,
|
||||
-.00000000000001302979717330866,
|
||||
.00000000000023097385217586939,
|
||||
.00000000000023999540484211737,
|
||||
.00000000000015393776174455408,
|
||||
-.00000000000036870428315837678,
|
||||
.00000000000036920375082080089,
|
||||
-.00000000000009383417223663699,
|
||||
.00000000000009433398189512690,
|
||||
.00000000000041481318704258568,
|
||||
-.00000000000003792316480209314,
|
||||
.00000000000008403156304792424,
|
||||
-.00000000000034262934348285429,
|
||||
.00000000000043712191957429145,
|
||||
-.00000000000010475750058776541,
|
||||
-.00000000000011118671389559323,
|
||||
.00000000000037549577257259853,
|
||||
.00000000000013912841212197565,
|
||||
.00000000000010775743037572640,
|
||||
.00000000000029391859187648000,
|
||||
-.00000000000042790509060060774,
|
||||
.00000000000022774076114039555,
|
||||
.00000000000010849569622967912,
|
||||
-.00000000000023073801945705758,
|
||||
.00000000000015761203773969435,
|
||||
.00000000000003345710269544082,
|
||||
-.00000000000041525158063436123,
|
||||
.00000000000032655698896907146,
|
||||
-.00000000000044704265010452446,
|
||||
.00000000000034527647952039772,
|
||||
-.00000000000007048962392109746,
|
||||
.00000000000011776978751369214,
|
||||
-.00000000000010774341461609578,
|
||||
.00000000000021863343293215910,
|
||||
.00000000000024132639491333131,
|
||||
.00000000000039057462209830700,
|
||||
-.00000000000026570679203560751,
|
||||
.00000000000037135141919592021,
|
||||
-.00000000000017166921336082431,
|
||||
-.00000000000028658285157914353,
|
||||
-.00000000000023812542263446809,
|
||||
.00000000000006576659768580062,
|
||||
-.00000000000028210143846181267,
|
||||
.00000000000010701931762114254,
|
||||
.00000000000018119346366441110,
|
||||
.00000000000009840465278232627,
|
||||
-.00000000000033149150282752542,
|
||||
-.00000000000018302857356041668,
|
||||
-.00000000000016207400156744949,
|
||||
.00000000000048303314949553201,
|
||||
-.00000000000071560553172382115,
|
||||
.00000000000088821239518571855,
|
||||
-.00000000000030900580513238244,
|
||||
-.00000000000061076551972851496,
|
||||
.00000000000035659969663347830,
|
||||
.00000000000035782396591276383,
|
||||
-.00000000000046226087001544578,
|
||||
.00000000000062279762917225156,
|
||||
.00000000000072838947272065741,
|
||||
.00000000000026809646615211673,
|
||||
-.00000000000010960825046059278,
|
||||
.00000000000002311949383800537,
|
||||
-.00000000000058469058005299247,
|
||||
-.00000000000002103748251144494,
|
||||
-.00000000000023323182945587408,
|
||||
-.00000000000042333694288141916,
|
||||
-.00000000000043933937969737844,
|
||||
.00000000000041341647073835565,
|
||||
.00000000000006841763641591466,
|
||||
.00000000000047585534004430641,
|
||||
.00000000000083679678674757695,
|
||||
-.00000000000085763734646658640,
|
||||
.00000000000021913281229340092,
|
||||
-.00000000000062242842536431148,
|
||||
-.00000000000010983594325438430,
|
||||
.00000000000065310431377633651,
|
||||
-.00000000000047580199021710769,
|
||||
-.00000000000037854251265457040,
|
||||
.00000000000040939233218678664,
|
||||
.00000000000087424383914858291,
|
||||
.00000000000025218188456842882,
|
||||
-.00000000000003608131360422557,
|
||||
-.00000000000050518555924280902,
|
||||
.00000000000078699403323355317,
|
||||
-.00000000000067020876961949060,
|
||||
.00000000000016108575753932458,
|
||||
.00000000000058527188436251509,
|
||||
-.00000000000035246757297904791,
|
||||
-.00000000000018372084495629058,
|
||||
.00000000000088606689813494916,
|
||||
.00000000000066486268071468700,
|
||||
.00000000000063831615170646519,
|
||||
.00000000000025144230728376072,
|
||||
-.00000000000017239444525614834
|
||||
};
|
||||
|
||||
#if 0
|
||||
double
|
||||
#ifdef _ANSI_SOURCE
|
||||
log(double x)
|
||||
#else
|
||||
log(x) double x;
|
||||
#endif
|
||||
{
|
||||
int m, j;
|
||||
double F, f, g, q, u, u2, v, zero = 0.0, one = 1.0;
|
||||
volatile double u1;
|
||||
|
||||
/* Catch special cases */
|
||||
if (x <= 0)
|
||||
if (x == zero) /* log(0) = -Inf */
|
||||
return (-one/zero);
|
||||
else /* log(neg) = NaN */
|
||||
return (zero/zero);
|
||||
else if (!finite(x))
|
||||
return (x+x); /* x = NaN, Inf */
|
||||
|
||||
/* Argument reduction: 1 <= g < 2; x/2^m = g; */
|
||||
/* y = F*(1 + f/F) for |f| <= 2^-8 */
|
||||
|
||||
m = logb(x);
|
||||
g = ldexp(x, -m);
|
||||
if (m == -1022) {
|
||||
j = logb(g), m += j;
|
||||
g = ldexp(g, -j);
|
||||
}
|
||||
j = N*(g-1) + .5;
|
||||
F = (1.0/N) * j + 1; /* F*128 is an integer in [128, 512] */
|
||||
f = g - F;
|
||||
|
||||
/* Approximate expansion for log(1+f/F) ~= u + q */
|
||||
g = 1/(2*F+f);
|
||||
u = 2*f*g;
|
||||
v = u*u;
|
||||
q = u*v*(A1 + v*(A2 + v*(A3 + v*A4)));
|
||||
|
||||
/* case 1: u1 = u rounded to 2^-43 absolute. Since u < 2^-8,
|
||||
* u1 has at most 35 bits, and F*u1 is exact, as F has < 8 bits.
|
||||
* It also adds exactly to |m*log2_hi + log_F_head[j] | < 750
|
||||
*/
|
||||
if (m | j)
|
||||
u1 = u + 513, u1 -= 513;
|
||||
|
||||
/* case 2: |1-x| < 1/256. The m- and j- dependent terms are zero;
|
||||
* u1 = u to 24 bits.
|
||||
*/
|
||||
else
|
||||
u1 = u, TRUNC(u1);
|
||||
u2 = (2.0*(f - F*u1) - u1*f) * g;
|
||||
/* u1 + u2 = 2f/(2F+f) to extra precision. */
|
||||
|
||||
/* log(x) = log(2^m*F*(1+f/F)) = */
|
||||
/* (m*log2_hi+logF_head[j]+u1) + (m*log2_lo+logF_tail[j]+q); */
|
||||
/* (exact) + (tiny) */
|
||||
|
||||
u1 += m*logF_head[N] + logF_head[j]; /* exact */
|
||||
u2 = (u2 + logF_tail[j]) + q; /* tiny */
|
||||
u2 += logF_tail[N]*m;
|
||||
return (u1 + u2);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Extra precision variant, returning struct {double a, b;};
|
||||
* log(x) = a+b to 63 bits, with a rounded to 26 bits.
|
||||
*/
|
||||
struct Double
|
||||
#ifdef _ANSI_SOURCE
|
||||
__log__D(double x)
|
||||
#else
|
||||
__log__D(x) double x;
|
||||
#endif
|
||||
{
|
||||
int m, j;
|
||||
double F, f, g, q, u, v, u2;
|
||||
volatile double u1;
|
||||
struct Double r;
|
||||
|
||||
/* Argument reduction: 1 <= g < 2; x/2^m = g; */
|
||||
/* y = F*(1 + f/F) for |f| <= 2^-8 */
|
||||
|
||||
m = logb(x);
|
||||
g = ldexp(x, -m);
|
||||
if (m == -1022) {
|
||||
j = logb(g), m += j;
|
||||
g = ldexp(g, -j);
|
||||
}
|
||||
j = N*(g-1) + .5;
|
||||
F = (1.0/N) * j + 1;
|
||||
f = g - F;
|
||||
|
||||
g = 1/(2*F+f);
|
||||
u = 2*f*g;
|
||||
v = u*u;
|
||||
q = u*v*(A1 + v*(A2 + v*(A3 + v*A4)));
|
||||
if (m | j)
|
||||
u1 = u + 513, u1 -= 513;
|
||||
else
|
||||
u1 = u, TRUNC(u1);
|
||||
u2 = (2.0*(f - F*u1) - u1*f) * g;
|
||||
|
||||
u1 += m*logF_head[N] + logF_head[j];
|
||||
|
||||
u2 += logF_tail[j]; u2 += q;
|
||||
u2 += logF_tail[N]*m;
|
||||
r.a = u1 + u2; /* Only difference is here */
|
||||
TRUNC(r.a);
|
||||
r.b = (u1 - r.a) + u2;
|
||||
return (r);
|
||||
}
|
|
@ -0,0 +1,317 @@
|
|||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* @(#)gamma.c 8.1 (Berkeley) 6/4/93 */
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* This code by P. McIlroy, Oct 1992;
|
||||
*
|
||||
* The financial support of UUNET Communications Services is greatfully
|
||||
* acknowledged.
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include "mathimpl.h"
|
||||
|
||||
/* METHOD:
|
||||
* x < 0: Use reflection formula, G(x) = pi/(sin(pi*x)*x*G(x))
|
||||
* At negative integers, return NaN and raise invalid.
|
||||
*
|
||||
* x < 6.5:
|
||||
* Use argument reduction G(x+1) = xG(x) to reach the
|
||||
* range [1.066124,2.066124]. Use a rational
|
||||
* approximation centered at the minimum (x0+1) to
|
||||
* ensure monotonicity.
|
||||
*
|
||||
* x >= 6.5: Use the asymptotic approximation (Stirling's formula)
|
||||
* adjusted for equal-ripples:
|
||||
*
|
||||
* log(G(x)) ~= (x-.5)*(log(x)-1) + .5(log(2*pi)-1) + 1/x*P(1/(x*x))
|
||||
*
|
||||
* Keep extra precision in multiplying (x-.5)(log(x)-1), to
|
||||
* avoid premature round-off.
|
||||
*
|
||||
* Special values:
|
||||
* -Inf: return NaN and raise invalid;
|
||||
* negative integer: return NaN and raise invalid;
|
||||
* other x ~< 177.79: return +-0 and raise underflow;
|
||||
* +-0: return +-Inf and raise divide-by-zero;
|
||||
* finite x ~> 171.63: return +Inf and raise overflow;
|
||||
* +Inf: return +Inf;
|
||||
* NaN: return NaN.
|
||||
*
|
||||
* Accuracy: tgamma(x) is accurate to within
|
||||
* x > 0: error provably < 0.9ulp.
|
||||
* Maximum observed in 1,000,000 trials was .87ulp.
|
||||
* x < 0:
|
||||
* Maximum observed error < 4ulp in 1,000,000 trials.
|
||||
*/
|
||||
|
||||
static double neg_gam(double);
|
||||
static double small_gam(double);
|
||||
static double smaller_gam(double);
|
||||
static struct Double large_gam(double);
|
||||
static struct Double ratfun_gam(double, double);
|
||||
|
||||
/*
|
||||
* Rational approximation, A0 + x*x*P(x)/Q(x), on the interval
|
||||
* [1.066.., 2.066..] accurate to 4.25e-19.
|
||||
*/
|
||||
#define LEFT -.3955078125 /* left boundary for rat. approx */
|
||||
#define x0 .461632144968362356785 /* xmin - 1 */
|
||||
|
||||
#define a0_hi 0.88560319441088874992
|
||||
#define a0_lo -.00000000000000004996427036469019695
|
||||
#define P0 6.21389571821820863029017800727e-01
|
||||
#define P1 2.65757198651533466104979197553e-01
|
||||
#define P2 5.53859446429917461063308081748e-03
|
||||
#define P3 1.38456698304096573887145282811e-03
|
||||
#define P4 2.40659950032711365819348969808e-03
|
||||
#define Q0 1.45019531250000000000000000000e+00
|
||||
#define Q1 1.06258521948016171343454061571e+00
|
||||
#define Q2 -2.07474561943859936441469926649e-01
|
||||
#define Q3 -1.46734131782005422506287573015e-01
|
||||
#define Q4 3.07878176156175520361557573779e-02
|
||||
#define Q5 5.12449347980666221336054633184e-03
|
||||
#define Q6 -1.76012741431666995019222898833e-03
|
||||
#define Q7 9.35021023573788935372153030556e-05
|
||||
#define Q8 6.13275507472443958924745652239e-06
|
||||
/*
|
||||
* Constants for large x approximation (x in [6, Inf])
|
||||
* (Accurate to 2.8*10^-19 absolute)
|
||||
*/
|
||||
#define lns2pi_hi 0.418945312500000
|
||||
#define lns2pi_lo -.000006779295327258219670263595
|
||||
#define Pa0 8.33333333333333148296162562474e-02
|
||||
#define Pa1 -2.77777777774548123579378966497e-03
|
||||
#define Pa2 7.93650778754435631476282786423e-04
|
||||
#define Pa3 -5.95235082566672847950717262222e-04
|
||||
#define Pa4 8.41428560346653702135821806252e-04
|
||||
#define Pa5 -1.89773526463879200348872089421e-03
|
||||
#define Pa6 5.69394463439411649408050664078e-03
|
||||
#define Pa7 -1.44705562421428915453880392761e-02
|
||||
|
||||
static const double zero = 0., one = 1.0, tiny = 1e-300;
|
||||
|
||||
double
|
||||
tgamma(x)
|
||||
double x;
|
||||
{
|
||||
struct Double u;
|
||||
|
||||
if (x >= 6) {
|
||||
if(x > 171.63)
|
||||
return (x / zero);
|
||||
u = large_gam(x);
|
||||
return(__exp__D(u.a, u.b));
|
||||
} else if (x >= 1.0 + LEFT + x0)
|
||||
return (small_gam(x));
|
||||
else if (x > 1.e-17)
|
||||
return (smaller_gam(x));
|
||||
else if (x > -1.e-17) {
|
||||
if (x != 0.0)
|
||||
u.a = one - tiny; /* raise inexact */
|
||||
return (one/x);
|
||||
} else if (!finite(x))
|
||||
return (x - x); /* x is NaN or -Inf */
|
||||
else
|
||||
return (neg_gam(x));
|
||||
}
|
||||
/*
|
||||
* Accurate to max(ulp(1/128) absolute, 2^-66 relative) error.
|
||||
*/
|
||||
static struct Double
|
||||
large_gam(x)
|
||||
double x;
|
||||
{
|
||||
double z, p;
|
||||
struct Double t, u, v;
|
||||
|
||||
z = one/(x*x);
|
||||
p = Pa0+z*(Pa1+z*(Pa2+z*(Pa3+z*(Pa4+z*(Pa5+z*(Pa6+z*Pa7))))));
|
||||
p = p/x;
|
||||
|
||||
u = __log__D(x);
|
||||
u.a -= one;
|
||||
v.a = (x -= .5);
|
||||
TRUNC(v.a);
|
||||
v.b = x - v.a;
|
||||
t.a = v.a*u.a; /* t = (x-.5)*(log(x)-1) */
|
||||
t.b = v.b*u.a + x*u.b;
|
||||
/* return t.a + t.b + lns2pi_hi + lns2pi_lo + p */
|
||||
t.b += lns2pi_lo; t.b += p;
|
||||
u.a = lns2pi_hi + t.b; u.a += t.a;
|
||||
u.b = t.a - u.a;
|
||||
u.b += lns2pi_hi; u.b += t.b;
|
||||
return (u);
|
||||
}
|
||||
/*
|
||||
* Good to < 1 ulp. (provably .90 ulp; .87 ulp on 1,000,000 runs.)
|
||||
* It also has correct monotonicity.
|
||||
*/
|
||||
static double
|
||||
small_gam(x)
|
||||
double x;
|
||||
{
|
||||
double y, ym1, t;
|
||||
struct Double yy, r;
|
||||
y = x - one;
|
||||
ym1 = y - one;
|
||||
if (y <= 1.0 + (LEFT + x0)) {
|
||||
yy = ratfun_gam(y - x0, 0);
|
||||
return (yy.a + yy.b);
|
||||
}
|
||||
r.a = y;
|
||||
TRUNC(r.a);
|
||||
yy.a = r.a - one;
|
||||
y = ym1;
|
||||
yy.b = r.b = y - yy.a;
|
||||
/* Argument reduction: G(x+1) = x*G(x) */
|
||||
for (ym1 = y-one; ym1 > LEFT + x0; y = ym1--, yy.a--) {
|
||||
t = r.a*yy.a;
|
||||
r.b = r.a*yy.b + y*r.b;
|
||||
r.a = t;
|
||||
TRUNC(r.a);
|
||||
r.b += (t - r.a);
|
||||
}
|
||||
/* Return r*tgamma(y). */
|
||||
yy = ratfun_gam(y - x0, 0);
|
||||
y = r.b*(yy.a + yy.b) + r.a*yy.b;
|
||||
y += yy.a*r.a;
|
||||
return (y);
|
||||
}
|
||||
/*
|
||||
* Good on (0, 1+x0+LEFT]. Accurate to 1ulp.
|
||||
*/
|
||||
static double
|
||||
smaller_gam(x)
|
||||
double x;
|
||||
{
|
||||
double t, d;
|
||||
struct Double r, xx;
|
||||
if (x < x0 + LEFT) {
|
||||
t = x, TRUNC(t);
|
||||
d = (t+x)*(x-t);
|
||||
t *= t;
|
||||
xx.a = (t + x), TRUNC(xx.a);
|
||||
xx.b = x - xx.a; xx.b += t; xx.b += d;
|
||||
t = (one-x0); t += x;
|
||||
d = (one-x0); d -= t; d += x;
|
||||
x = xx.a + xx.b;
|
||||
} else {
|
||||
xx.a = x, TRUNC(xx.a);
|
||||
xx.b = x - xx.a;
|
||||
t = x - x0;
|
||||
d = (-x0 -t); d += x;
|
||||
}
|
||||
r = ratfun_gam(t, d);
|
||||
d = r.a/x, TRUNC(d);
|
||||
r.a -= d*xx.a; r.a -= d*xx.b; r.a += r.b;
|
||||
return (d + r.a/x);
|
||||
}
|
||||
/*
|
||||
* returns (z+c)^2 * P(z)/Q(z) + a0
|
||||
*/
|
||||
static struct Double
|
||||
ratfun_gam(z, c)
|
||||
double z, c;
|
||||
{
|
||||
double p, q;
|
||||
struct Double r, t;
|
||||
|
||||
q = Q0 +z*(Q1+z*(Q2+z*(Q3+z*(Q4+z*(Q5+z*(Q6+z*(Q7+z*Q8)))))));
|
||||
p = P0 + z*(P1 + z*(P2 + z*(P3 + z*P4)));
|
||||
|
||||
/* return r.a + r.b = a0 + (z+c)^2*p/q, with r.a truncated to 26 bits. */
|
||||
p = p/q;
|
||||
t.a = z, TRUNC(t.a); /* t ~= z + c */
|
||||
t.b = (z - t.a) + c;
|
||||
t.b *= (t.a + z);
|
||||
q = (t.a *= t.a); /* t = (z+c)^2 */
|
||||
TRUNC(t.a);
|
||||
t.b += (q - t.a);
|
||||
r.a = p, TRUNC(r.a); /* r = P/Q */
|
||||
r.b = p - r.a;
|
||||
t.b = t.b*p + t.a*r.b + a0_lo;
|
||||
t.a *= r.a; /* t = (z+c)^2*(P/Q) */
|
||||
r.a = t.a + a0_hi, TRUNC(r.a);
|
||||
r.b = ((a0_hi-r.a) + t.a) + t.b;
|
||||
return (r); /* r = a0 + t */
|
||||
}
|
||||
|
||||
static double
|
||||
neg_gam(x)
|
||||
double x;
|
||||
{
|
||||
int sgn = 1;
|
||||
struct Double lg, lsine;
|
||||
double y, z;
|
||||
|
||||
y = ceil(x);
|
||||
if (y == x) /* Negative integer. */
|
||||
return ((x - x) / zero);
|
||||
z = y - x;
|
||||
if (z > 0.5)
|
||||
z = one - z;
|
||||
y = 0.5 * y;
|
||||
if (y == ceil(y))
|
||||
sgn = -1;
|
||||
if (z < .25)
|
||||
z = sin(M_PI*z);
|
||||
else
|
||||
z = cos(M_PI*(0.5-z));
|
||||
/* Special case: G(1-x) = Inf; G(x) may be nonzero. */
|
||||
if (x < -170) {
|
||||
if (x < -190)
|
||||
return ((double)sgn*tiny*tiny);
|
||||
y = one - x; /* exact: 128 < |x| < 255 */
|
||||
lg = large_gam(y);
|
||||
lsine = __log__D(M_PI/z); /* = TRUNC(log(u)) + small */
|
||||
lg.a -= lsine.a; /* exact (opposite signs) */
|
||||
lg.b -= lsine.b;
|
||||
y = -(lg.a + lg.b);
|
||||
z = (y + lg.a) + lg.b;
|
||||
y = __exp__D(y, z);
|
||||
if (sgn < 0) y = -y;
|
||||
return (y);
|
||||
}
|
||||
y = one-x;
|
||||
if (one-y == x)
|
||||
y = tgamma(y);
|
||||
else /* 1-x is inexact */
|
||||
y = -x*tgamma(-x);
|
||||
if (sgn < 0) y = -y;
|
||||
return (M_PI / (y*z));
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)mathimpl.h 8.1 (Berkeley) 6/4/93
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#ifndef _MATHIMPL_H_
|
||||
#define _MATHIMPL_H_
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "../src/math_private.h"
|
||||
|
||||
/*
|
||||
* TRUNC() is a macro that sets the trailing 27 bits in the mantissa of an
|
||||
* IEEE double variable to zero. It must be expression-like for syntactic
|
||||
* reasons, and we implement this expression using an inline function
|
||||
* instead of a pure macro to avoid depending on the gcc feature of
|
||||
* statement-expressions.
|
||||
*/
|
||||
#define TRUNC(d) (_b_trunc(&(d)))
|
||||
|
||||
static __inline void
|
||||
_b_trunc(volatile double *_dp)
|
||||
{
|
||||
uint32_t _lw;
|
||||
|
||||
GET_LOW_WORD(_lw, *_dp);
|
||||
SET_LOW_WORD(*_dp, _lw & 0xf8000000);
|
||||
}
|
||||
|
||||
struct Double {
|
||||
double a;
|
||||
double b;
|
||||
};
|
||||
|
||||
/*
|
||||
* Functions internal to the math package, yet not static.
|
||||
*/
|
||||
double __exp__D(double, double);
|
||||
struct Double __log__D(double);
|
||||
|
||||
#endif /* !_MATHIMPL_H_ */
|
|
@ -0,0 +1,22 @@
|
|||
# $FreeBSD$
|
||||
|
||||
ARCH_SRCS = e_exp.S e_fmod.S e_log.S e_log10.S \
|
||||
e_remainder.S e_sqrt.S s_ceil.S s_copysign.S \
|
||||
s_finite.S s_floor.S s_llrint.S s_logb.S s_lrint.S \
|
||||
s_remquo.S s_rint.S s_scalbn.S s_significand.S \
|
||||
s_trunc.S
|
||||
|
||||
# float counterparts
|
||||
ARCH_SRCS+= e_fmodf.S e_log10f.S e_logf.S e_remainderf.S \
|
||||
e_sqrtf.S s_ceilf.S s_copysignf.S s_floorf.S \
|
||||
s_llrintf.S s_logbf.S s_lrintf.S \
|
||||
s_remquof.S s_rintf.S s_scalbnf.S s_significandf.S s_truncf.S
|
||||
|
||||
# long double counterparts
|
||||
ARCH_SRCS+= e_fmodl.S \
|
||||
e_remainderl.S e_sqrtl.S s_ceill.S s_copysignl.S \
|
||||
s_floorl.S s_llrintl.S \
|
||||
s_logbl.S s_lrintl.S s_remquol.S s_rintl.S s_scalbnl.S s_truncl.S
|
||||
|
||||
LDBL_PREC = 64 # XXX 64-bit format, but truncated to 53 bits
|
||||
SYM_MAPS += ${.CURDIR}/i387/Symbol.map
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
FBSD_1.0 {
|
||||
__has_sse;
|
||||
__test_sse;
|
||||
fesetexceptflag;
|
||||
feraiseexcept;
|
||||
fegetenv;
|
||||
feholdexcept;
|
||||
feupdateenv;
|
||||
feenableexcept;
|
||||
fedisableexcept;
|
||||
};
|
|
@ -0,0 +1,100 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
/* e^x = 2^(x * log2(e)) */
|
||||
ENTRY(exp)
|
||||
/*
|
||||
* If x is +-Inf, then the subtraction would give Inf-Inf = NaN.
|
||||
* Avoid this. Also avoid it if x is NaN for convenience.
|
||||
*/
|
||||
movl 8(%esp),%eax
|
||||
andl $0x7fffffff,%eax
|
||||
cmpl $0x7ff00000,%eax
|
||||
jae x_Inf_or_NaN
|
||||
|
||||
fldl 4(%esp)
|
||||
|
||||
/*
|
||||
* Extended precision is needed to reduce the maximum error from
|
||||
* hundreds of ulps to less than 1 ulp. Switch to it if necessary.
|
||||
* We may as well set the rounding mode to to-nearest and mask traps
|
||||
* if we switch.
|
||||
*/
|
||||
fstcw 4(%esp)
|
||||
movl 4(%esp),%eax
|
||||
andl $0x0300,%eax
|
||||
cmpl $0x0300,%eax /* RC == 0 && PC == 3? */
|
||||
je 1f /* jump if mode is good */
|
||||
movl $0x137f,8(%esp)
|
||||
fldcw 8(%esp)
|
||||
1:
|
||||
fldl2e
|
||||
fmulp /* x * log2(e) */
|
||||
fst %st(1)
|
||||
frndint /* int(x * log2(e)) */
|
||||
fst %st(2)
|
||||
fsubrp /* fract(x * log2(e)) */
|
||||
f2xm1 /* 2^(fract(x * log2(e))) - 1 */
|
||||
fld1
|
||||
faddp /* 2^(fract(x * log2(e))) */
|
||||
fscale /* e^x */
|
||||
fstp %st(1)
|
||||
je 1f
|
||||
fldcw 4(%esp)
|
||||
1:
|
||||
ret
|
||||
|
||||
x_Inf_or_NaN:
|
||||
/*
|
||||
* Return 0 if x is -Inf. Otherwise just return x; when x is Inf
|
||||
* this gives Inf, and when x is a NaN this gives the same result
|
||||
* as (x + x) (x quieted).
|
||||
*/
|
||||
cmpl $0xfff00000,8(%esp)
|
||||
jne x_not_minus_Inf
|
||||
cmpl $0,4(%esp)
|
||||
jne x_not_minus_Inf
|
||||
fldz
|
||||
ret
|
||||
|
||||
x_not_minus_Inf:
|
||||
fldl 4(%esp)
|
||||
ret
|
||||
END(exp)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(fmod)
|
||||
fldl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(fmod)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(fmodf)
|
||||
flds 8(%esp)
|
||||
flds 4(%esp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(fmodf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(fmodl)
|
||||
fldt 16(%esp)
|
||||
fldt 4(%esp)
|
||||
1: fprem
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(fmodl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(log)
|
||||
fldln2
|
||||
fldl 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(log)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(log10)
|
||||
fldlg2
|
||||
fldl 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(log10)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: e_log10f.S,v 1.1 1996/07/03 16:50:22 jtc Exp $") */
|
||||
|
||||
ENTRY(log10f)
|
||||
fldlg2
|
||||
flds 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
END(log10f)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: e_logf.S,v 1.2 1996/07/06 00:15:45 jtc Exp $") */
|
||||
|
||||
ENTRY(logf)
|
||||
fldln2
|
||||
flds 4(%esp)
|
||||
fyl2x
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(remainder)
|
||||
fldl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(remainder)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: e_remainderf.S,v 1.2 1995/05/08 23:49:47 jtc Exp $") */
|
||||
|
||||
ENTRY(remainderf)
|
||||
flds 8(%esp)
|
||||
flds 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(remainderf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(remainderl)
|
||||
fldt 16(%esp)
|
||||
fldt 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(sqrt)
|
||||
fldl 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
END(sqrt)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: e_sqrtf.S,v 1.2 1995/05/08 23:50:14 jtc Exp $") */
|
||||
|
||||
ENTRY(sqrtf)
|
||||
flds 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
END(sqrtf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(sqrtl)
|
||||
fldt 4(%esp)
|
||||
fsqrt
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,228 @@
|
|||
/*-
|
||||
* Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <sys/types.h>
|
||||
#include <machine/npx.h>
|
||||
|
||||
#define __fenv_static
|
||||
#include "fenv.h"
|
||||
|
||||
#ifdef __GNUC_GNU_INLINE__
|
||||
#error "This file must be compiled with C99 'inline' semantics"
|
||||
#endif
|
||||
|
||||
const fenv_t __fe_dfl_env = {
|
||||
__INITIAL_NPXCW__,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x1f80,
|
||||
0xffffffff,
|
||||
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff }
|
||||
};
|
||||
|
||||
enum __sse_support __has_sse =
|
||||
#ifdef __SSE__
|
||||
__SSE_YES;
|
||||
#else
|
||||
__SSE_UNK;
|
||||
#endif
|
||||
|
||||
#define getfl(x) __asm __volatile("pushfl\n\tpopl %0" : "=mr" (*(x)))
|
||||
#define setfl(x) __asm __volatile("pushl %0\n\tpopfl" : : "g" (x))
|
||||
#define cpuid_dx(x) __asm __volatile("pushl %%ebx\n\tmovl $1, %%eax\n\t" \
|
||||
"cpuid\n\tpopl %%ebx" \
|
||||
: "=d" (*(x)) : : "eax", "ecx")
|
||||
|
||||
/*
|
||||
* Test for SSE support on this processor. We need to do this because
|
||||
* we need to use ldmxcsr/stmxcsr to get correct results if any part
|
||||
* of the program was compiled to use SSE floating-point, but we can't
|
||||
* use SSE on older processors.
|
||||
*/
|
||||
int
|
||||
__test_sse(void)
|
||||
{
|
||||
int flag, nflag;
|
||||
int dx_features;
|
||||
|
||||
/* Am I a 486? */
|
||||
getfl(&flag);
|
||||
nflag = flag ^ 0x200000;
|
||||
setfl(nflag);
|
||||
getfl(&nflag);
|
||||
if (flag != nflag) {
|
||||
/* Not a 486, so CPUID should work. */
|
||||
cpuid_dx(&dx_features);
|
||||
if (dx_features & 0x2000000) {
|
||||
__has_sse = __SSE_YES;
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
__has_sse = __SSE_NO;
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern inline int feclearexcept(int __excepts);
|
||||
extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
|
||||
|
||||
int
|
||||
fesetexceptflag(const fexcept_t *flagp, int excepts)
|
||||
{
|
||||
fenv_t env;
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__fnstenv(&env);
|
||||
env.__status &= ~excepts;
|
||||
env.__status |= *flagp & excepts;
|
||||
__fldenv(env);
|
||||
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&mxcsr);
|
||||
mxcsr &= ~excepts;
|
||||
mxcsr |= *flagp & excepts;
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feraiseexcept(int excepts)
|
||||
{
|
||||
fexcept_t ex = excepts;
|
||||
|
||||
fesetexceptflag(&ex, excepts);
|
||||
__fwait();
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern inline int fetestexcept(int __excepts);
|
||||
extern inline int fegetround(void);
|
||||
extern inline int fesetround(int __round);
|
||||
|
||||
int
|
||||
fegetenv(fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__fnstenv(envp);
|
||||
/*
|
||||
* fnstenv masks all exceptions, so we need to restore
|
||||
* the old control word to avoid this side effect.
|
||||
*/
|
||||
__fldcw(envp->__control);
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&mxcsr);
|
||||
__set_mxcsr(*envp, mxcsr);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
feholdexcept(fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
|
||||
__fnstenv(envp);
|
||||
__fnclex();
|
||||
if (__HAS_SSE()) {
|
||||
__stmxcsr(&mxcsr);
|
||||
__set_mxcsr(*envp, mxcsr);
|
||||
mxcsr &= ~FE_ALL_EXCEPT;
|
||||
mxcsr |= FE_ALL_EXCEPT << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
extern inline int fesetenv(const fenv_t *__envp);
|
||||
|
||||
int
|
||||
feupdateenv(const fenv_t *envp)
|
||||
{
|
||||
__uint32_t mxcsr;
|
||||
__uint16_t status;
|
||||
|
||||
__fnstsw(&status);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&mxcsr);
|
||||
else
|
||||
mxcsr = 0;
|
||||
fesetenv(envp);
|
||||
feraiseexcept((mxcsr | status) & FE_ALL_EXCEPT);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int
|
||||
__feenableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&mxcsr);
|
||||
else
|
||||
mxcsr = 0;
|
||||
omask = ~(control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control &= ~mask;
|
||||
__fldcw(control);
|
||||
if (__HAS_SSE()) {
|
||||
mxcsr &= ~(mask << _SSE_EMASK_SHIFT);
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
return (omask);
|
||||
}
|
||||
|
||||
int
|
||||
__fedisableexcept(int mask)
|
||||
{
|
||||
__uint32_t mxcsr, omask;
|
||||
__uint16_t control;
|
||||
|
||||
mask &= FE_ALL_EXCEPT;
|
||||
__fnstcw(&control);
|
||||
if (__HAS_SSE())
|
||||
__stmxcsr(&mxcsr);
|
||||
else
|
||||
mxcsr = 0;
|
||||
omask = ~(control | mxcsr >> _SSE_EMASK_SHIFT) & FE_ALL_EXCEPT;
|
||||
control |= mask;
|
||||
__fldcw(control);
|
||||
if (__HAS_SSE()) {
|
||||
mxcsr |= mask << _SSE_EMASK_SHIFT;
|
||||
__ldmxcsr(mxcsr);
|
||||
}
|
||||
return (omask);
|
||||
}
|
||||
|
||||
__weak_reference(__feenableexcept, feenableexcept);
|
||||
__weak_reference(__fedisableexcept, fedisableexcept);
|
|
@ -0,0 +1,86 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define STRUCT_DECLS
|
||||
#include "invtrig.h"
|
||||
|
||||
/*
|
||||
* asinl() and acosl()
|
||||
*/
|
||||
const LONGDOUBLE
|
||||
pS0 = { 0xaaaaaaaaaaaaaaa8ULL, 0x3ffcU }, /* 1.66666666666666666631e-01L */
|
||||
pS1 = { 0xd5271b6699b48bfaULL, 0xbffdU }, /* -4.16313987993683104320e-01L */
|
||||
pS2 = { 0xbcf67ca9e9f669cfULL, 0x3ffdU }, /* 3.69068046323246813704e-01L */
|
||||
pS3 = { 0x8b7baa3d15f9830dULL, 0xbffcU }, /* -1.36213932016738603108e-01L */
|
||||
pS4 = { 0x92154b093a3bff1cULL, 0x3ff9U }, /* 1.78324189708471965733e-02L */
|
||||
pS5 = { 0xe5dd76401964508cULL, 0xbff2U }, /* -2.19216428382605211588e-04L */
|
||||
pS6 = { 0xee69c5b0fdb76951ULL, 0xbfedU }, /* -7.10526623669075243183e-06L */
|
||||
qS1 = { 0xbcaa2159c01436a0ULL, 0xc000U }, /* -2.94788392796209867269e+00L */
|
||||
qS2 = { 0xd17a73d1e1564c29ULL, 0x4000U }, /* 3.27309890266528636716e+00L */
|
||||
qS3 = { 0xd767e411c9cf4c2cULL, 0xbfffU }, /* -1.68285799854822427013e+00L */
|
||||
qS4 = { 0xc809c0dfb9b0d0b7ULL, 0x3ffdU }, /* 3.90699412641738801874e-01L */
|
||||
qS5 = { 0x80c3a2197c8ced57ULL, 0xbffaU }; /* -3.14365703596053263322e-02L */
|
||||
|
||||
/*
|
||||
* atanl()
|
||||
*/
|
||||
const LONGDOUBLE atanhi[] = {
|
||||
{ 0xed63382b0dda7b45ULL, 0x3ffdU }, /* 4.63647609000806116202e-01L */
|
||||
{ 0xc90fdaa22168c235ULL, 0x3ffeU }, /* 7.85398163397448309628e-01L */
|
||||
{ 0xfb985e940fb4d900ULL, 0x3ffeU }, /* 9.82793723247329067960e-01L */
|
||||
{ 0xc90fdaa22168c235ULL, 0x3fffU }, /* 1.57079632679489661926e+00L */
|
||||
};
|
||||
|
||||
const LONGDOUBLE atanlo[] = {
|
||||
{ 0xdfc88bd978751a07ULL, 0x3fbcU }, /* 1.18469937025062860669e-20L */
|
||||
{ 0xece675d1fc8f8cbbULL, 0xbfbcU }, /* -1.25413940316708300586e-20L */
|
||||
{ 0xf10f5e197793c283ULL, 0x3fbdU }, /* 2.55232234165405176172e-20L */
|
||||
{ 0xece675d1fc8f8cbbULL, 0xbfbdU }, /* -2.50827880633416601173e-20L */
|
||||
};
|
||||
|
||||
const LONGDOUBLE aT[] = {
|
||||
{ 0xaaaaaaaaaaaaaa9fULL, 0x3ffdU }, /* 3.33333333333333333017e-01L */
|
||||
{ 0xcccccccccccc62bcULL, 0xbffcU }, /* -1.99999999999999632011e-01L */
|
||||
{ 0x9249249248b81e3fULL, 0x3ffcU }, /* 1.42857142857046531280e-01L */
|
||||
{ 0xe38e38e3316f3de5ULL, 0xbffbU }, /* -1.11111111100562372733e-01L */
|
||||
{ 0xba2e8b8dc280726aULL, 0x3ffbU }, /* 9.09090902935647302252e-02L */
|
||||
{ 0x9d89d5b4c6847ec4ULL, 0xbffbU }, /* -7.69230552476207730353e-02L */
|
||||
{ 0x8888461d3099c677ULL, 0x3ffbU }, /* 6.66661718042406260546e-02L */
|
||||
{ 0xf0e8ee0f5328dc29ULL, 0xbffaU }, /* -5.88158892835030888692e-02L */
|
||||
{ 0xd73ea84d24bae54aULL, 0x3ffaU }, /* 5.25499891539726639379e-02L */
|
||||
{ 0xc08fa381dcd9213aULL, 0xbffaU }, /* -4.70119845393155721494e-02L */
|
||||
{ 0xa54a26f4095f2a3aULL, 0x3ffaU }, /* 4.03539201366454414072e-02L */
|
||||
{ 0xeea2d8d059ef3ad6ULL, 0xbff9U }, /* -2.91303858419364158725e-02L */
|
||||
{ 0xcc82292ab894b051ULL, 0x3ff8U }, /* 1.24822046299269234080e-02L */
|
||||
};
|
||||
|
||||
const LONGDOUBLE
|
||||
pi_lo = { 0xece675d1fc8f8cbbULL, 0xbfbeU }; /* -5.01655761266833202345e-20L */
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(ceil)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0800,%dx /* round towards +oo */
|
||||
andw $0xfbff,%dx
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldl 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(ceil)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_ceilf.S,v 1.3 1995/05/08 23:52:44 jtc Exp $") */
|
||||
|
||||
ENTRY(ceilf)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0800,%dx /* round towards +oo */
|
||||
andw $0xfbff,%dx
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
flds 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(ceilf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(ceill)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0800,%dx /* round towards +oo */
|
||||
andw $0xfbff,%dx
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldt 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(ceill)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(copysign)
|
||||
movl 16(%esp),%edx
|
||||
andl $0x80000000,%edx
|
||||
movl 8(%esp),%eax
|
||||
andl $0x7fffffff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,8(%esp)
|
||||
fldl 4(%esp)
|
||||
ret
|
||||
END(copysign)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_copysignf.S,v 1.3 1995/05/08 23:53:25 jtc Exp $") */
|
||||
|
||||
ENTRY(copysignf)
|
||||
movl 8(%esp),%edx
|
||||
andl $0x80000000,%edx
|
||||
movl 4(%esp),%eax
|
||||
andl $0x7fffffff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,4(%esp)
|
||||
flds 4(%esp)
|
||||
ret
|
||||
END(copysignf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(copysignl)
|
||||
movl 24(%esp),%edx
|
||||
andl $0x8000,%edx
|
||||
movl 12(%esp),%eax
|
||||
andl $0x7fff,%eax
|
||||
orl %edx,%eax
|
||||
movl %eax,12(%esp)
|
||||
fldt 4(%esp)
|
||||
ret
|
||||
END(copysignl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(cos)
|
||||
fldl 4(%esp)
|
||||
fcos
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jp 1f
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jp 2b
|
||||
fstp %st(1)
|
||||
fcos
|
||||
ret
|
||||
END(cos)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(finite)
|
||||
movl 8(%esp),%eax
|
||||
andl $0x7ff00000, %eax
|
||||
cmpl $0x7ff00000, %eax
|
||||
setneb %al
|
||||
andl $0x000000ff, %eax
|
||||
ret
|
||||
END(finite)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(floor)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0400,%dx /* round towards -oo */
|
||||
andw $0xf7ff,%dx
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldl 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(floor)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_floorf.S,v 1.3 1995/05/09 00:04:32 jtc Exp $") */
|
||||
|
||||
ENTRY(floorf)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0400,%dx /* round towards -oo */
|
||||
andw $0xf7ff,%dx
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
flds 8(%ebp); /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(floorf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(floorl)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0400,%dx /* round towards -oo */
|
||||
andw $0xf7ff,%dx
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldt 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(floorl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(llrint)
|
||||
fldl 4(%esp)
|
||||
subl $8,%esp
|
||||
fistpll (%esp)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
END(llrint)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,39 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(llrintf)
|
||||
flds 4(%esp)
|
||||
subl $8,%esp
|
||||
fistpll (%esp)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
END(llrintf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,38 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(llrintl)
|
||||
fldt 4(%esp)
|
||||
subl $8,%esp
|
||||
fistpll (%esp)
|
||||
popl %eax
|
||||
popl %edx
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(logb)
|
||||
fldl 4(%esp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
END(logb)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_logbf.S,v 1.3 1995/05/09 00:15:12 jtc Exp $") */
|
||||
|
||||
ENTRY(logbf)
|
||||
flds 4(%esp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
END(logbf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(logbl)
|
||||
fldt 4(%esp)
|
||||
fxtract
|
||||
fstp %st
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,38 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(lrint)
|
||||
fldl 4(%esp)
|
||||
subl $4,%esp
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
END(lrint)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,38 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(lrintf)
|
||||
flds 4(%esp)
|
||||
subl $4,%esp
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
END(lrintf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,37 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(lrintl)
|
||||
fldt 4(%esp)
|
||||
subl $4,%esp
|
||||
fistpl (%esp)
|
||||
popl %eax
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,65 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(remquo)
|
||||
fldl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 16(%esp),%ecx
|
||||
xorl 8(%esp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl 20(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
END(remquo)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,65 @@
|
|||
/*-
|
||||
* Copyright (c) 2005 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(remquof)
|
||||
flds 8(%esp)
|
||||
flds 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 8(%esp),%ecx
|
||||
xorl 4(%esp),%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl 12(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
END(remquof)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,65 @@
|
|||
/*-
|
||||
* Copyright (c) 2005-2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Based on public-domain remainder routine by J.T. Conklin <jtc@NetBSD.org>.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
ENTRY(remquol)
|
||||
fldt 16(%esp)
|
||||
fldt 4(%esp)
|
||||
1: fprem1
|
||||
fstsw %ax
|
||||
sahf
|
||||
jp 1b
|
||||
fstp %st(1)
|
||||
/* Extract the three low-order bits of the quotient from C0,C3,C1. */
|
||||
shrl $6,%eax
|
||||
movl %eax,%ecx
|
||||
andl $0x108,%eax
|
||||
rorl $7,%eax
|
||||
orl %eax,%ecx
|
||||
roll $4,%eax
|
||||
orl %ecx,%eax
|
||||
andl $7,%eax
|
||||
/* Negate the quotient bits if x*y<0. Avoid using an unpredictable branch. */
|
||||
movl 24(%esp),%ecx
|
||||
xorl 12(%esp),%ecx
|
||||
movsx %cx,%ecx
|
||||
sarl $16,%ecx
|
||||
sarl $16,%ecx
|
||||
xorl %ecx,%eax
|
||||
andl $1,%ecx
|
||||
addl %ecx,%eax
|
||||
/* Store the quotient and return. */
|
||||
movl 28(%esp),%ecx
|
||||
movl %eax,(%ecx)
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(rint)
|
||||
fldl 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
END(rint)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_rintf.S,v 1.3 1995/05/09 00:17:22 jtc Exp $") */
|
||||
|
||||
ENTRY(rintf)
|
||||
flds 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
END(rintf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(rintl)
|
||||
fldt 4(%esp)
|
||||
frndint
|
||||
ret
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(scalbn)
|
||||
fildl 12(%esp)
|
||||
fldl 4(%esp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(scalbn)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */
|
||||
|
||||
ENTRY(scalbnf)
|
||||
fildl 8(%esp)
|
||||
flds 4(%esp)
|
||||
fscale
|
||||
fstp %st(1) /* bug fix for fp stack overflow */
|
||||
ret
|
||||
END(scalbnf)
|
||||
|
||||
.globl CNAME(ldexpf)
|
||||
.set CNAME(ldexpf),CNAME(scalbnf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */
|
||||
|
||||
ENTRY(scalbnl)
|
||||
fildl 16(%esp)
|
||||
fldt 4(%esp)
|
||||
fscale
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(scalbnl)
|
||||
|
||||
.globl CNAME(ldexpl)
|
||||
.set CNAME(ldexpl),CNAME(scalbnl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (c) 1993,94 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(significand)
|
||||
fldl 4(%esp)
|
||||
fxtract
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(significand)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Written by J.T. Conklin <jtc@netbsd.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
__FBSDID("$FreeBSD$");
|
||||
/* RCSID("$NetBSD: s_significandf.S,v 1.3 1995/05/09 00:24:07 jtc Exp $") */
|
||||
|
||||
ENTRY(significandf)
|
||||
flds 4(%esp)
|
||||
fxtract
|
||||
fstp %st(1)
|
||||
ret
|
||||
END(significandf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(sin)
|
||||
fldl 4(%esp)
|
||||
fsin
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jp 1f
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jp 2b
|
||||
fstp %st(1)
|
||||
fsin
|
||||
ret
|
||||
END(sin)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* Copyright (c) 1994 Winning Strategies, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by Winning Strategies, Inc.
|
||||
* 4. The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Written by:
|
||||
* J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(tan)
|
||||
fldl 4(%esp)
|
||||
fptan
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jp 1f
|
||||
fstp %st(0)
|
||||
ret
|
||||
1: fldpi
|
||||
fadd %st(0)
|
||||
fxch %st(1)
|
||||
2: fprem
|
||||
fnstsw %ax
|
||||
sahf
|
||||
jp 2b
|
||||
fstp %st(1)
|
||||
fptan
|
||||
fstp %st(0)
|
||||
ret
|
||||
END(tan)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(trunc)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0c00,%dx /* round towards -oo */
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldl 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(trunc)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(truncf)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0c00,%dx /* round towards -oo */
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
flds 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(truncf)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* Based on code written by J.T. Conklin <jtc@NetBSD.org>.
|
||||
* Public domain.
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
__FBSDID("$FreeBSD$")
|
||||
|
||||
ENTRY(truncl)
|
||||
pushl %ebp
|
||||
movl %esp,%ebp
|
||||
subl $8,%esp
|
||||
|
||||
fstcw -4(%ebp) /* store fpu control word */
|
||||
movw -4(%ebp),%dx
|
||||
orw $0x0c00,%dx /* round towards -oo */
|
||||
movw %dx,-8(%ebp)
|
||||
fldcw -8(%ebp) /* load modfied control word */
|
||||
|
||||
fldt 8(%ebp) /* round */
|
||||
frndint
|
||||
|
||||
fldcw -4(%ebp) /* restore original control word */
|
||||
|
||||
leave
|
||||
ret
|
||||
END(truncl)
|
||||
|
||||
.section .note.GNU-stack,"",%progbits
|
|
@ -0,0 +1,330 @@
|
|||
/* @(#)e_lgamma_r.c 1.3 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/*
|
||||
* See e_lgamma_r.c for complete comments.
|
||||
*
|
||||
* Converted to long double by Steven G. Kargl.
|
||||
*/
|
||||
|
||||
#include "fpmath.h"
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
|
||||
static const volatile double vzero = 0;
|
||||
|
||||
static const double
|
||||
zero= 0,
|
||||
half= 0.5,
|
||||
one = 1;
|
||||
|
||||
static const long double
|
||||
pi = 3.14159265358979323846264338327950288e+00L;
|
||||
/*
|
||||
* Domain y in [0x1p-119, 0.28], range ~[-1.4065e-36, 1.4065e-36]:
|
||||
* |(lgamma(2 - y) + y / 2) / y - a(y)| < 2**-119.1
|
||||
*/
|
||||
static const long double
|
||||
a0 = 7.72156649015328606065120900824024296e-02L,
|
||||
a1 = 3.22467033424113218236207583323018498e-01L,
|
||||
a2 = 6.73523010531980951332460538330282217e-02L,
|
||||
a3 = 2.05808084277845478790009252803463129e-02L,
|
||||
a4 = 7.38555102867398526627292839296001626e-03L,
|
||||
a5 = 2.89051033074152328576829509522483468e-03L,
|
||||
a6 = 1.19275391170326097618357349881842913e-03L,
|
||||
a7 = 5.09669524743042462515256340206203019e-04L,
|
||||
a8 = 2.23154758453578096143609255559576017e-04L,
|
||||
a9 = 9.94575127818397632126978731542755129e-05L,
|
||||
a10 = 4.49262367375420471287545895027098145e-05L,
|
||||
a11 = 2.05072127845117995426519671481628849e-05L,
|
||||
a12 = 9.43948816959096748454087141447939513e-06L,
|
||||
a13 = 4.37486780697359330303852050718287419e-06L,
|
||||
a14 = 2.03920783892362558276037363847651809e-06L,
|
||||
a15 = 9.55191070057967287877923073200324649e-07L,
|
||||
a16 = 4.48993286185740853170657139487620560e-07L,
|
||||
a17 = 2.13107543597620911675316728179563522e-07L,
|
||||
a18 = 9.70745379855304499867546549551023473e-08L,
|
||||
a19 = 5.61889970390290257926487734695402075e-08L,
|
||||
a20 = 6.42739653024130071866684358960960951e-09L,
|
||||
a21 = 3.34491062143649291746195612991870119e-08L,
|
||||
a22 = -1.57068547394315223934653011440641472e-08L,
|
||||
a23 = 1.30812825422415841213733487745200632e-08L;
|
||||
/*
|
||||
* Domain x in [tc-0.24, tc+0.28], range ~[-6.3201e-37, 6.3201e-37]:
|
||||
* |(lgamma(x) - tf) - t(x - tc)| < 2**-120.3.
|
||||
*/
|
||||
static const long double
|
||||
tc = 1.46163214496836234126265954232572133e+00L,
|
||||
tf = -1.21486290535849608095514557177691584e-01L,
|
||||
tt = 1.57061739945077675484237837992951704e-36L,
|
||||
t0 = -1.99238329499314692728655623767019240e-36L,
|
||||
t1 = -6.08453430711711404116887457663281416e-35L,
|
||||
t2 = 4.83836122723810585213722380854828904e-01L,
|
||||
t3 = -1.47587722994530702030955093950668275e-01L,
|
||||
t4 = 6.46249402389127526561003464202671923e-02L,
|
||||
t5 = -3.27885410884813055008502586863748063e-02L,
|
||||
t6 = 1.79706751152103942928638276067164935e-02L,
|
||||
t7 = -1.03142230366363872751602029672767978e-02L,
|
||||
t8 = 6.10053602051788840313573150785080958e-03L,
|
||||
t9 = -3.68456960831637325470641021892968954e-03L,
|
||||
t10 = 2.25976482322181046611440855340968560e-03L,
|
||||
t11 = -1.40225144590445082933490395950664961e-03L,
|
||||
t12 = 8.78232634717681264035014878172485575e-04L,
|
||||
t13 = -5.54194952796682301220684760591403899e-04L,
|
||||
t14 = 3.51912956837848209220421213975000298e-04L,
|
||||
t15 = -2.24653443695947456542669289367055542e-04L,
|
||||
t16 = 1.44070395420840737695611929680511823e-04L,
|
||||
t17 = -9.27609865550394140067059487518862512e-05L,
|
||||
t18 = 5.99347334438437081412945428365433073e-05L,
|
||||
t19 = -3.88458388854572825603964274134801009e-05L,
|
||||
t20 = 2.52476631610328129217896436186551043e-05L,
|
||||
t21 = -1.64508584981658692556994212457518536e-05L,
|
||||
t22 = 1.07434583475987007495523340296173839e-05L,
|
||||
t23 = -7.03070407519397260929482550448878399e-06L,
|
||||
t24 = 4.60968590693753579648385629003100469e-06L,
|
||||
t25 = -3.02765473778832036018438676945512661e-06L,
|
||||
t26 = 1.99238771545503819972741288511303401e-06L,
|
||||
t27 = -1.31281299822614084861868817951788579e-06L,
|
||||
t28 = 8.60844432267399655055574642052370223e-07L,
|
||||
t29 = -5.64535486432397413273248363550536374e-07L,
|
||||
t30 = 3.99357783676275660934903139592727737e-07L,
|
||||
t31 = -2.95849029193433121795495215869311610e-07L,
|
||||
t32 = 1.37790144435073124976696250804940384e-07L;
|
||||
/*
|
||||
* Domain y in [-0.1, 0.232], range ~[-1.4046e-37, 1.4181e-37]:
|
||||
* |(lgamma(1 + y) + 0.5 * y) / y - u(y) / v(y)| < 2**-122.8
|
||||
*/
|
||||
static const long double
|
||||
u0 = -7.72156649015328606065120900824024311e-02L,
|
||||
u1 = 4.24082772271938167430983113242482656e-01L,
|
||||
u2 = 2.96194003481457101058321977413332171e+00L,
|
||||
u3 = 6.49503267711258043997790983071543710e+00L,
|
||||
u4 = 7.40090051288150177152835698948644483e+00L,
|
||||
u5 = 4.94698036296756044610805900340723464e+00L,
|
||||
u6 = 2.00194224610796294762469550684947768e+00L,
|
||||
u7 = 4.82073087750608895996915051568834949e-01L,
|
||||
u8 = 6.46694052280506568192333848437585427e-02L,
|
||||
u9 = 4.17685526755100259316625348933108810e-03L,
|
||||
u10 = 9.06361003550314327144119307810053410e-05L,
|
||||
v1 = 5.15937098592887275994320496999951947e+00L,
|
||||
v2 = 1.14068418766251486777604403304717558e+01L,
|
||||
v3 = 1.41164839437524744055723871839748489e+01L,
|
||||
v4 = 1.07170702656179582805791063277960532e+01L,
|
||||
v5 = 5.14448694179047879915042998453632434e+00L,
|
||||
v6 = 1.55210088094585540637493826431170289e+00L,
|
||||
v7 = 2.82975732849424562719893657416365673e-01L,
|
||||
v8 = 2.86424622754753198010525786005443539e-02L,
|
||||
v9 = 1.35364253570403771005922441442688978e-03L,
|
||||
v10 = 1.91514173702398375346658943749580666e-05L,
|
||||
v11 = -3.25364686890242327944584691466034268e-08L;
|
||||
/*
|
||||
* Domain x in (2, 3], range ~[-1.3341e-36, 1.3536e-36]:
|
||||
* |(lgamma(y+2) - 0.5 * y) / y - s(y)/r(y)| < 2**-120.1
|
||||
* with y = x - 2.
|
||||
*/
|
||||
static const long double
|
||||
s0 = -7.72156649015328606065120900824024297e-02L,
|
||||
s1 = 1.23221687850916448903914170805852253e-01L,
|
||||
s2 = 5.43673188699937239808255378293820020e-01L,
|
||||
s3 = 6.31998137119005233383666791176301800e-01L,
|
||||
s4 = 3.75885340179479850993811501596213763e-01L,
|
||||
s5 = 1.31572908743275052623410195011261575e-01L,
|
||||
s6 = 2.82528453299138685507186287149699749e-02L,
|
||||
s7 = 3.70262021550340817867688714880797019e-03L,
|
||||
s8 = 2.83374000312371199625774129290973648e-04L,
|
||||
s9 = 1.15091830239148290758883505582343691e-05L,
|
||||
s10 = 2.04203474281493971326506384646692446e-07L,
|
||||
s11 = 9.79544198078992058548607407635645763e-10L,
|
||||
r1 = 2.58037466655605285937112832039537492e+00L,
|
||||
r2 = 2.86289413392776399262513849911531180e+00L,
|
||||
r3 = 1.78691044735267497452847829579514367e+00L,
|
||||
r4 = 6.89400381446725342846854215600008055e-01L,
|
||||
r5 = 1.70135865462567955867134197595365343e-01L,
|
||||
r6 = 2.68794816183964420375498986152766763e-02L,
|
||||
r7 = 2.64617234244861832870088893332006679e-03L,
|
||||
r8 = 1.52881761239180800640068128681725702e-04L,
|
||||
r9 = 4.63264813762296029824851351257638558e-06L,
|
||||
r10 = 5.89461519146957343083848967333671142e-08L,
|
||||
r11 = 1.79027678176582527798327441636552968e-10L;
|
||||
/*
|
||||
* Domain z in [8, 0x1p70], range ~[-9.8214e-35, 9.8214e-35]:
|
||||
* |lgamma(x) - (x - 0.5) * (log(x) - 1) - w(1/x)| < 2**-113.0
|
||||
*/
|
||||
static const long double
|
||||
w0 = 4.18938533204672741780329736405617738e-01L,
|
||||
w1 = 8.33333333333333333333333333332852026e-02L,
|
||||
w2 = -2.77777777777777777777777727810123528e-03L,
|
||||
w3 = 7.93650793650793650791708939493907380e-04L,
|
||||
w4 = -5.95238095238095234390450004444370959e-04L,
|
||||
w5 = 8.41750841750837633887817658848845695e-04L,
|
||||
w6 = -1.91752691752396849943172337347259743e-03L,
|
||||
w7 = 6.41025640880333069429106541459015557e-03L,
|
||||
w8 = -2.95506530801732133437990433080327074e-02L,
|
||||
w9 = 1.79644237328444101596766586979576927e-01L,
|
||||
w10 = -1.39240539108367641920172649259736394e+00L,
|
||||
w11 = 1.33987701479007233325288857758641761e+01L,
|
||||
w12 = -1.56363596431084279780966590116006255e+02L,
|
||||
w13 = 2.14830978044410267201172332952040777e+03L,
|
||||
w14 = -3.28636067474227378352761516589092334e+04L,
|
||||
w15 = 5.06201257747865138432663574251462485e+05L,
|
||||
w16 = -6.79720123352023636706247599728048344e+06L,
|
||||
w17 = 6.57556601705472106989497289465949255e+07L,
|
||||
w18 = -3.26229058141181783534257632389415580e+08L;
|
||||
|
||||
static long double
|
||||
sin_pil(long double x)
|
||||
{
|
||||
volatile long double vz;
|
||||
long double y,z;
|
||||
uint64_t lx, n;
|
||||
uint16_t hx;
|
||||
|
||||
y = -x;
|
||||
|
||||
vz = y+0x1.p112;
|
||||
z = vz-0x1.p112;
|
||||
if (z == y)
|
||||
return zero;
|
||||
|
||||
vz = y+0x1.p110;
|
||||
EXTRACT_LDBL128_WORDS(hx,lx,n,vz);
|
||||
z = vz-0x1.p110;
|
||||
if (z > y) {
|
||||
z -= 0.25;
|
||||
n--;
|
||||
}
|
||||
n &= 7;
|
||||
y = y - z + n * 0.25;
|
||||
|
||||
switch (n) {
|
||||
case 0: y = __kernel_sinl(pi*y,zero,0); break;
|
||||
case 1:
|
||||
case 2: y = __kernel_cosl(pi*(0.5-y),zero); break;
|
||||
case 3:
|
||||
case 4: y = __kernel_sinl(pi*(one-y),zero,0); break;
|
||||
case 5:
|
||||
case 6: y = -__kernel_cosl(pi*(y-1.5),zero); break;
|
||||
default: y = __kernel_sinl(pi*(y-2.0),zero,0); break;
|
||||
}
|
||||
return -y;
|
||||
}
|
||||
|
||||
long double
|
||||
lgammal_r(long double x, int *signgamp)
|
||||
{
|
||||
long double nadj,p,p1,p2,p3,q,r,t,w,y,z;
|
||||
uint64_t llx,lx;
|
||||
int i;
|
||||
uint16_t hx,ix;
|
||||
|
||||
EXTRACT_LDBL128_WORDS(hx,lx,llx,x);
|
||||
|
||||
/* purge +-Inf and NaNs */
|
||||
*signgamp = 1;
|
||||
ix = hx&0x7fff;
|
||||
if(ix==0x7fff) return x*x;
|
||||
|
||||
/* purge +-0 and tiny arguments */
|
||||
*signgamp = 1-2*(hx>>15);
|
||||
if(ix<0x3fff-116) { /* |x|<2**-(p+3), return -log(|x|) */
|
||||
if((ix|lx|llx)==0)
|
||||
return one/vzero;
|
||||
return -logl(fabsl(x));
|
||||
}
|
||||
|
||||
/* purge negative integers and start evaluation for other x < 0 */
|
||||
if(hx&0x8000) {
|
||||
*signgamp = 1;
|
||||
if(ix>=0x3fff+112) /* |x|>=2**(p-1), must be -integer */
|
||||
return one/vzero;
|
||||
t = sin_pil(x);
|
||||
if(t==zero) return one/vzero;
|
||||
nadj = logl(pi/fabsl(t*x));
|
||||
if(t<zero) *signgamp = -1;
|
||||
x = -x;
|
||||
}
|
||||
|
||||
/* purge 1 and 2 */
|
||||
if((ix==0x3fff || ix==0x4000) && (lx|llx)==0) r = 0;
|
||||
/* for x < 2.0 */
|
||||
else if(ix<0x4000) {
|
||||
if(x<=8.9999961853027344e-01) {
|
||||
r = -logl(x);
|
||||
if(x>=7.3159980773925781e-01) {y = 1-x; i= 0;}
|
||||
else if(x>=2.3163998126983643e-01) {y= x-(tc-1); i=1;}
|
||||
else {y = x; i=2;}
|
||||
} else {
|
||||
r = 0;
|
||||
if(x>=1.7316312789916992e+00) {y=2-x;i=0;}
|
||||
else if(x>=1.2316322326660156e+00) {y=x-tc;i=1;}
|
||||
else {y=x-1;i=2;}
|
||||
}
|
||||
switch(i) {
|
||||
case 0:
|
||||
z = y*y;
|
||||
p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*(a10+z*(a12+z*(a14+z*(a16+
|
||||
z*(a18+z*(a20+z*a22))))))))));
|
||||
p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*(a11+z*(a13+z*(a15+
|
||||
z*(a17+z*(a19+z*(a21+z*a23)))))))))));
|
||||
p = y*p1+p2;
|
||||
r += p-y/2; break;
|
||||
case 1:
|
||||
p = t0+y*t1+tt+y*y*(t2+y*(t3+y*(t4+y*(t5+y*(t6+y*(t7+y*(t8+
|
||||
y*(t9+y*(t10+y*(t11+y*(t12+y*(t13+y*(t14+y*(t15+y*(t16+
|
||||
y*(t17+y*(t18+y*(t19+y*(t20+y*(t21+y*(t22+y*(t23+
|
||||
y*(t24+y*(t25+y*(t26+y*(t27+y*(t28+y*(t29+y*(t30+
|
||||
y*(t31+y*t32))))))))))))))))))))))))))))));
|
||||
r += tf + p; break;
|
||||
case 2:
|
||||
p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*(u5+y*(u6+y*(u7+
|
||||
y*(u8+y*(u9+y*u10))))))))));
|
||||
p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*(v5+y*(v6+y*(v7+
|
||||
y*(v8+y*(v9+y*(v10+y*v11))))))))));
|
||||
r += p1/p2-y/2;
|
||||
}
|
||||
}
|
||||
/* x < 8.0 */
|
||||
else if(ix<0x4002) {
|
||||
i = x;
|
||||
y = x-i;
|
||||
p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*(s6+y*(s7+y*(s8+
|
||||
y*(s9+y*(s10+y*s11)))))))))));
|
||||
q = one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*(r6+y*(r7+y*(r8+
|
||||
y*(r9+y*(r10+y*r11))))))))));
|
||||
r = y/2+p/q;
|
||||
z = 1; /* lgamma(1+s) = log(s) + lgamma(s) */
|
||||
switch(i) {
|
||||
case 7: z *= (y+6); /* FALLTHRU */
|
||||
case 6: z *= (y+5); /* FALLTHRU */
|
||||
case 5: z *= (y+4); /* FALLTHRU */
|
||||
case 4: z *= (y+3); /* FALLTHRU */
|
||||
case 3: z *= (y+2); /* FALLTHRU */
|
||||
r += logl(z); break;
|
||||
}
|
||||
/* 8.0 <= x < 2**(p+3) */
|
||||
} else if (ix<0x3fff+116) {
|
||||
t = logl(x);
|
||||
z = one/x;
|
||||
y = z*z;
|
||||
w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*(w6+y*(w7+y*(w8+
|
||||
y*(w9+y*(w10+y*(w11+y*(w12+y*(w13+y*(w14+y*(w15+y*(w16+
|
||||
y*(w17+y*w18)))))))))))))))));
|
||||
r = (x-half)*(t-one)+w;
|
||||
/* 2**(p+3) <= x <= inf */
|
||||
} else
|
||||
r = x*(logl(x)-1);
|
||||
if(hx&0x8000) r = nadj - r;
|
||||
return r;
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
/* From: @(#)e_rem_pio2.c 1.4 95/01/18 */
|
||||
/*
|
||||
* ====================================================
|
||||
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
||||
* Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans.
|
||||
*
|
||||
* Developed at SunSoft, a Sun Microsystems, Inc. business.
|
||||
* Permission to use, copy, modify, and distribute this
|
||||
* software is freely granted, provided that this notice
|
||||
* is preserved.
|
||||
* ====================================================
|
||||
*
|
||||
* Optimized by Bruce D. Evans.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
/* ld128 version of __ieee754_rem_pio2l(x,y)
|
||||
*
|
||||
* return the remainder of x rem pi/2 in y[0]+y[1]
|
||||
* use __kernel_rem_pio2()
|
||||
*/
|
||||
|
||||
#include <float.h>
|
||||
|
||||
#include "math.h"
|
||||
#include "math_private.h"
|
||||
#include "fpmath.h"
|
||||
|
||||
#define BIAS (LDBL_MAX_EXP - 1)
|
||||
|
||||
/*
|
||||
* XXX need to verify that nonzero integer multiples of pi/2 within the
|
||||
* range get no closer to a long double than 2**-140, or that
|
||||
* ilogb(x) + ilogb(min_delta) < 45 - -140.
|
||||
*/
|
||||
/*
|
||||
* invpio2: 113 bits of 2/pi
|
||||
* pio2_1: first 68 bits of pi/2
|
||||
* pio2_1t: pi/2 - pio2_1
|
||||
* pio2_2: second 68 bits of pi/2
|
||||
* pio2_2t: pi/2 - (pio2_1+pio2_2)
|
||||
* pio2_3: third 68 bits of pi/2
|
||||
* pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3)
|
||||
*/
|
||||
|
||||
static const double
|
||||
zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */
|
||||
two24 = 1.67772160000000000000e+07; /* 0x41700000, 0x00000000 */
|
||||
|
||||
static const long double
|
||||
invpio2 = 6.3661977236758134307553505349005747e-01L, /* 0x145f306dc9c882a53f84eafa3ea6a.0p-113 */
|
||||
pio2_1 = 1.5707963267948966192292994253909555e+00L, /* 0x1921fb54442d18469800000000000.0p-112 */
|
||||
pio2_1t = 2.0222662487959507323996846200947577e-21L, /* 0x13198a2e03707344a4093822299f3.0p-181 */
|
||||
pio2_2 = 2.0222662487959507323994779168837751e-21L, /* 0x13198a2e03707344a400000000000.0p-181 */
|
||||
pio2_2t = 2.0670321098263988236496903051604844e-43L, /* 0x127044533e63a0105df531d89cd91.0p-254 */
|
||||
pio2_3 = 2.0670321098263988236499468110329591e-43L, /* 0x127044533e63a0105e00000000000.0p-254 */
|
||||
pio2_3t = -2.5650587247459238361625433492959285e-65L; /* -0x159c4ec64ddaeb5f78671cbfb2210.0p-327 */
|
||||
|
||||
static inline __always_inline int
|
||||
__ieee754_rem_pio2l(long double x, long double *y)
|
||||
{
|
||||
union IEEEl2bits u,u1;
|
||||
long double z,w,t,r,fn;
|
||||
double tx[5],ty[3];
|
||||
int64_t n;
|
||||
int e0,ex,i,j,nx;
|
||||
int16_t expsign;
|
||||
|
||||
u.e = x;
|
||||
expsign = u.xbits.expsign;
|
||||
ex = expsign & 0x7fff;
|
||||
if (ex < BIAS + 45 || ex == BIAS + 45 &&
|
||||
u.bits.manh < 0x921fb54442d1LL) {
|
||||
/* |x| ~< 2^45*(pi/2), medium size */
|
||||
/* Use a specialized rint() to get fn. Assume round-to-nearest. */
|
||||
fn = x*invpio2+0x1.8p112;
|
||||
fn = fn-0x1.8p112;
|
||||
#ifdef HAVE_EFFICIENT_I64RINT
|
||||
n = i64rint(fn);
|
||||
#else
|
||||
n = fn;
|
||||
#endif
|
||||
r = x-fn*pio2_1;
|
||||
w = fn*pio2_1t; /* 1st round good to 180 bit */
|
||||
{
|
||||
union IEEEl2bits u2;
|
||||
int ex1;
|
||||
j = ex;
|
||||
y[0] = r-w;
|
||||
u2.e = y[0];
|
||||
ex1 = u2.xbits.expsign & 0x7fff;
|
||||
i = j-ex1;
|
||||
if(i>51) { /* 2nd iteration needed, good to 248 */
|
||||
t = r;
|
||||
w = fn*pio2_2;
|
||||
r = t-w;
|
||||
w = fn*pio2_2t-((t-r)-w);
|
||||
y[0] = r-w;
|
||||
u2.e = y[0];
|
||||
ex1 = u2.xbits.expsign & 0x7fff;
|
||||
i = j-ex1;
|
||||
if(i>119) { /* 3rd iteration need, 316 bits acc */
|
||||
t = r; /* will cover all possible cases */
|
||||
w = fn*pio2_3;
|
||||
r = t-w;
|
||||
w = fn*pio2_3t-((t-r)-w);
|
||||
y[0] = r-w;
|
||||
}
|
||||
}
|
||||
}
|
||||
y[1] = (r-y[0])-w;
|
||||
return n;
|
||||
}
|
||||
/*
|
||||
* all other (large) arguments
|
||||
*/
|
||||
if(ex==0x7fff) { /* x is inf or NaN */
|
||||
y[0]=y[1]=x-x; return 0;
|
||||
}
|
||||
/* set z = scalbn(|x|,ilogb(x)-23) */
|
||||
u1.e = x;
|
||||
e0 = ex - BIAS - 23; /* e0 = ilogb(|x|)-23; */
|
||||
u1.xbits.expsign = ex - e0;
|
||||
z = u1.e;
|
||||
for(i=0;i<4;i++) {
|
||||
tx[i] = (double)((int32_t)(z));
|
||||
z = (z-tx[i])*two24;
|
||||
}
|
||||
tx[4] = z;
|
||||
nx = 5;
|
||||
while(tx[nx-1]==zero) nx--; /* skip zero term */
|
||||
n = __kernel_rem_pio2(tx,ty,e0,nx,3);
|
||||
t = (long double)ty[2] + ty[1];
|
||||
r = t + ty[0];
|
||||
w = ty[0] - (r - t);
|
||||
if(expsign<0) {y[0] = -r; y[1] = -w; return -n;}
|
||||
y[0] = r; y[1] = w; return n;
|
||||
}
|
|
@ -0,0 +1,100 @@
|
|||
/*-
|
||||
* Copyright (c) 2008 David Schultz <das@FreeBSD.ORG>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__FBSDID("$FreeBSD$");
|
||||
|
||||
#include "invtrig.h"
|
||||
|
||||
/*
|
||||
* asinl() and acosl()
|
||||
*/
|
||||
const long double
|
||||
pS0 = 1.66666666666666666666666666666700314e-01L,
|
||||
pS1 = -7.32816946414566252574527475428622708e-01L,
|
||||
pS2 = 1.34215708714992334609030036562143589e+00L,
|
||||
pS3 = -1.32483151677116409805070261790752040e+00L,
|
||||
pS4 = 7.61206183613632558824485341162121989e-01L,
|
||||
pS5 = -2.56165783329023486777386833928147375e-01L,
|
||||
pS6 = 4.80718586374448793411019434585413855e-02L,
|
||||
pS7 = -4.42523267167024279410230886239774718e-03L,
|
||||
pS8 = 1.44551535183911458253205638280410064e-04L,
|
||||
pS9 = -2.10558957916600254061591040482706179e-07L,
|
||||
qS1 = -4.84690167848739751544716485245697428e+00L,
|
||||
qS2 = 9.96619113536172610135016921140206980e+00L,
|
||||
qS3 = -1.13177895428973036660836798461641458e+01L,
|
||||
qS4 = 7.74004374389488266169304117714658761e+00L,
|
||||
qS5 = -3.25871986053534084709023539900339905e+00L,
|
||||
qS6 = 8.27830318881232209752469022352928864e-01L,
|
||||
qS7 = -1.18768052702942805423330715206348004e-01L,
|
||||
qS8 = 8.32600764660522313269101537926539470e-03L,
|
||||
qS9 = -1.99407384882605586705979504567947007e-04L;
|
||||
|
||||
/*
|
||||
* atanl()
|
||||
*/
|
||||
const long double atanhi[] = {
|
||||
4.63647609000806116214256231461214397e-01L,
|
||||
7.85398163397448309615660845819875699e-01L,
|
||||
9.82793723247329067985710611014666038e-01L,
|
||||
1.57079632679489661923132169163975140e+00L,
|
||||
};
|
||||
|
||||
const long double atanlo[] = {
|
||||
4.89509642257333492668618435220297706e-36L,
|
||||
2.16795253253094525619926100651083806e-35L,
|
||||
-2.31288434538183565909319952098066272e-35L,
|
||||
4.33590506506189051239852201302167613e-35L,
|
||||
};
|
||||
|
||||
const long double aT[] = {
|
||||
3.33333333333333333333333333333333125e-01L,
|
||||
-1.99999999999999999999999999999180430e-01L,
|
||||
1.42857142857142857142857142125269827e-01L,
|
||||
-1.11111111111111111111110834490810169e-01L,
|
||||
9.09090909090909090908522355708623681e-02L,
|
||||
-7.69230769230769230696553844935357021e-02L,
|
||||
6.66666666666666660390096773046256096e-02L,
|
||||
-5.88235294117646671706582985209643694e-02L,
|
||||
5.26315789473666478515847092020327506e-02L,
|
||||
-4.76190476189855517021024424991436144e-02L,
|
||||
4.34782608678695085948531993458097026e-02L,
|
||||
-3.99999999632663469330634215991142368e-02L,
|
||||
3.70370363987423702891250829918659723e-02L,
|
||||
-3.44827496515048090726669907612335954e-02L,
|
||||
3.22579620681420149871973710852268528e-02L,
|
||||
-3.03020767654269261041647570626778067e-02L,
|
||||
2.85641979882534783223403715930946138e-02L,
|
||||
-2.69824879726738568189929461383741323e-02L,
|
||||
2.54194698498808542954187110873675769e-02L,
|
||||
-2.35083879708189059926183138130183215e-02L,
|
||||
2.04832358998165364349957325067131428e-02L,
|
||||
-1.54489555488544397858507248612362957e-02L,
|
||||
8.64492360989278761493037861575248038e-03L,
|
||||
-2.58521121597609872727919154569765469e-03L,
|
||||
};
|
||||
|
||||
const long double pi_lo = 8.67181013012378102479704402604335225e-35L;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue