003 File Manager
Current Path:
/usr/src/lib/msun/i387
usr
/
src
/
lib
/
msun
/
i387
/
📁
..
📄
Makefile.inc
(791 B)
📄
Symbol.map
(168 B)
📄
e_exp.S
(3.08 KB)
📄
e_fmod.S
(1.91 KB)
📄
e_fmodf.S
(262 B)
📄
e_fmodl.S
(1.92 KB)
📄
e_log.S
(1.87 KB)
📄
e_log10.S
(1.87 KB)
📄
e_log10f.S
(292 B)
📄
e_logf.S
(286 B)
📄
e_remainder.S
(1.92 KB)
📄
e_remainderf.S
(350 B)
📄
e_remainderl.S
(1.93 KB)
📄
e_sqrt.S
(1.86 KB)
📄
e_sqrtf.S
(281 B)
📄
e_sqrtl.S
(1.86 KB)
📄
fenv.c
(5.15 KB)
📄
invtrig.c
(4.13 KB)
📄
s_ceil.S
(2.17 KB)
📄
s_ceilf.S
(596 B)
📄
s_ceill.S
(539 B)
📄
s_copysign.S
(1.98 KB)
📄
s_copysignf.S
(404 B)
📄
s_copysignl.S
(337 B)
📄
s_cos.S
(1.97 KB)
📄
s_finite.S
(1.94 KB)
📄
s_floor.S
(2.17 KB)
📄
s_floorf.S
(599 B)
📄
s_floorl.S
(540 B)
📄
s_llrint.S
(1.53 KB)
📄
s_llrintf.S
(1.53 KB)
📄
s_llrintl.S
(1.53 KB)
📄
s_logb.S
(1.87 KB)
📄
s_logbf.S
(293 B)
📄
s_logbl.S
(1.87 KB)
📄
s_lrint.S
(1.51 KB)
📄
s_lrintf.S
(1.51 KB)
📄
s_lrintl.S
(1.51 KB)
📄
s_remquo.S
(2.07 KB)
📄
s_remquof.S
(2.07 KB)
📄
s_remquol.S
(2.09 KB)
📄
s_rint.S
(1.86 KB)
📄
s_rintf.S
(283 B)
📄
s_rintl.S
(1.86 KB)
📄
s_scalbn.S
(1.89 KB)
📄
s_scalbnf.S
(414 B)
📄
s_scalbnl.S
(378 B)
📄
s_significand.S
(1.89 KB)
📄
s_significandf.S
(317 B)
📄
s_sin.S
(1.97 KB)
📄
s_tan.S
(2 KB)
📄
s_trunc.S
(520 B)
📄
s_truncf.S
(522 B)
📄
s_truncl.S
(522 B)
Editing: fenv.c
/*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * 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);
Upload File
Create Folder