mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-06-04 04:48:16 +00:00
fpu: move inline helpers into a separate header
There are a bunch of users of the inline helpers who do not need access to the entire softfloat API. Move those inline helpers into a new header file which can be included without bringing in the rest of the world. Backports commit e34c47ea3fb5f324b58db117b3c010a494c8d6ca from qemu
This commit is contained in:
parent
be878fb0e9
commit
5ab2ac8dac
132
qemu/include/fpu/softfloat-helpers.h
Normal file
132
qemu/include/fpu/softfloat-helpers.h
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
* QEMU float support - standalone helpers
|
||||||
|
*
|
||||||
|
* This is provided for files that don't need the access to the full
|
||||||
|
* set of softfloat functions. Typically this is cpu initialisation
|
||||||
|
* code which wants to set default rounding and exceptions modes.
|
||||||
|
*
|
||||||
|
* The code in this source file is derived from release 2a of the SoftFloat
|
||||||
|
* IEC/IEEE Floating-point Arithmetic Package. Those parts of the code (and
|
||||||
|
* some later contributions) are provided under that license, as detailed below.
|
||||||
|
* It has subsequently been modified by contributors to the QEMU Project,
|
||||||
|
* so some portions are provided under:
|
||||||
|
* the SoftFloat-2a license
|
||||||
|
* the BSD license
|
||||||
|
* GPL-v2-or-later
|
||||||
|
*
|
||||||
|
* Any future contributions to this file after December 1st 2014 will be
|
||||||
|
* taken to be licensed under the Softfloat-2a license unless specifically
|
||||||
|
* indicated otherwise.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
===============================================================================
|
||||||
|
This C header file is part of the SoftFloat IEC/IEEE Floating-point
|
||||||
|
Arithmetic Package, Release 2a.
|
||||||
|
|
||||||
|
Written by John R. Hauser. This work was made possible in part by the
|
||||||
|
International Computer Science Institute, located at Suite 600, 1947 Center
|
||||||
|
Street, Berkeley, California 94704. Funding was partially provided by the
|
||||||
|
National Science Foundation under grant MIP-9311980. The original version
|
||||||
|
of this code was written as part of a project to build a fixed-point vector
|
||||||
|
processor in collaboration with the University of California at Berkeley,
|
||||||
|
overseen by Profs. Nelson Morgan and John Wawrzynek. More information
|
||||||
|
is available through the Web page `http://HTTP.CS.Berkeley.EDU/~jhauser/
|
||||||
|
arithmetic/SoftFloat.html'.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
|
||||||
|
has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
|
||||||
|
TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
|
||||||
|
PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
|
||||||
|
AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
|
||||||
|
|
||||||
|
Derivative works are acceptable, even for commercial purposes, so long as
|
||||||
|
(1) they include prominent notice that the work is derivative, and (2) they
|
||||||
|
include prominent notice akin to these four paragraphs for those parts of
|
||||||
|
this code that are retained.
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SOFTFLOAT_HELPERS_H_
|
||||||
|
#define _SOFTFLOAT_HELPERS_H_
|
||||||
|
|
||||||
|
#include "fpu/softfloat-types.h"
|
||||||
|
|
||||||
|
static inline void set_float_detect_tininess(int val, float_status *status)
|
||||||
|
{
|
||||||
|
status->float_detect_tininess = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_float_rounding_mode(int val, float_status *status)
|
||||||
|
{
|
||||||
|
status->float_rounding_mode = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_float_exception_flags(int val, float_status *status)
|
||||||
|
{
|
||||||
|
status->float_exception_flags = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_floatx80_rounding_precision(int val,
|
||||||
|
float_status *status)
|
||||||
|
{
|
||||||
|
status->floatx80_rounding_precision = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_flush_to_zero(flag val, float_status *status)
|
||||||
|
{
|
||||||
|
status->flush_to_zero = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_flush_inputs_to_zero(flag val, float_status *status)
|
||||||
|
{
|
||||||
|
status->flush_inputs_to_zero = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_default_nan_mode(flag val, float_status *status)
|
||||||
|
{
|
||||||
|
status->default_nan_mode = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void set_snan_bit_is_one(flag val, float_status *status)
|
||||||
|
{
|
||||||
|
status->snan_bit_is_one = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_float_detect_tininess(float_status *status)
|
||||||
|
{
|
||||||
|
return status->float_detect_tininess;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_float_rounding_mode(float_status *status)
|
||||||
|
{
|
||||||
|
return status->float_rounding_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_float_exception_flags(float_status *status)
|
||||||
|
{
|
||||||
|
return status->float_exception_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int get_floatx80_rounding_precision(float_status *status)
|
||||||
|
{
|
||||||
|
return status->floatx80_rounding_precision;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline flag get_flush_to_zero(float_status *status)
|
||||||
|
{
|
||||||
|
return status->flush_to_zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline flag get_flush_inputs_to_zero(float_status *status)
|
||||||
|
{
|
||||||
|
return status->flush_inputs_to_zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline flag get_default_nan_mode(float_status *status)
|
||||||
|
{
|
||||||
|
return status->default_nan_mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _SOFTFLOAT_HELPERS_H_ */
|
|
@ -97,67 +97,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "fpu/softfloat-types.h"
|
#include "fpu/softfloat-types.h"
|
||||||
|
#include "fpu/softfloat-helpers.h"
|
||||||
static inline void set_float_detect_tininess(int val, float_status *status)
|
|
||||||
{
|
|
||||||
status->float_detect_tininess = val;
|
|
||||||
}
|
|
||||||
static inline void set_float_rounding_mode(int val, float_status *status)
|
|
||||||
{
|
|
||||||
status->float_rounding_mode = val;
|
|
||||||
}
|
|
||||||
static inline void set_float_exception_flags(int val, float_status *status)
|
|
||||||
{
|
|
||||||
status->float_exception_flags = val;
|
|
||||||
}
|
|
||||||
static inline void set_floatx80_rounding_precision(int val, float_status *status)
|
|
||||||
{
|
|
||||||
status->floatx80_rounding_precision = val;
|
|
||||||
}
|
|
||||||
static inline void set_flush_to_zero(flag val, float_status *status)
|
|
||||||
{
|
|
||||||
status->flush_to_zero = val;
|
|
||||||
}
|
|
||||||
static inline void set_flush_inputs_to_zero(flag val, float_status *status)
|
|
||||||
{
|
|
||||||
status->flush_inputs_to_zero = val;
|
|
||||||
}
|
|
||||||
static inline void set_default_nan_mode(flag val, float_status *status)
|
|
||||||
{
|
|
||||||
status->default_nan_mode = val;
|
|
||||||
}
|
|
||||||
static inline void set_snan_bit_is_one(flag val, float_status *status)
|
|
||||||
{
|
|
||||||
status->snan_bit_is_one = val;
|
|
||||||
}
|
|
||||||
static inline int get_float_detect_tininess(float_status *status)
|
|
||||||
{
|
|
||||||
return status->float_detect_tininess;
|
|
||||||
}
|
|
||||||
static inline int get_float_rounding_mode(float_status *status)
|
|
||||||
{
|
|
||||||
return status->float_rounding_mode;
|
|
||||||
}
|
|
||||||
static inline int get_float_exception_flags(float_status *status)
|
|
||||||
{
|
|
||||||
return status->float_exception_flags;
|
|
||||||
}
|
|
||||||
static inline int get_floatx80_rounding_precision(float_status *status)
|
|
||||||
{
|
|
||||||
return status->floatx80_rounding_precision;
|
|
||||||
}
|
|
||||||
static inline flag get_flush_to_zero(float_status *status)
|
|
||||||
{
|
|
||||||
return status->flush_to_zero;
|
|
||||||
}
|
|
||||||
static inline flag get_flush_inputs_to_zero(float_status *status)
|
|
||||||
{
|
|
||||||
return status->flush_inputs_to_zero;
|
|
||||||
}
|
|
||||||
static inline flag get_default_nan_mode(float_status *status)
|
|
||||||
{
|
|
||||||
return status->default_nan_mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------
|
/*----------------------------------------------------------------------------
|
||||||
| Routine to raise any or all of the software IEC/IEEE floating-point
|
| Routine to raise any or all of the software IEC/IEEE floating-point
|
||||||
|
|
Loading…
Reference in a new issue