⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 softfloat.h

📁 xen虚拟机源代码安装包
💻 H
📖 第 1 页 / 共 2 页
字号:
/*============================================================================This C header file is part of the SoftFloat IEC/IEEE Floating-point ArithmeticPackage, Release 2b.Written by John R. Hauser.  This work was made possible in part by theInternational Computer Science Institute, located at Suite 600, 1947 CenterStreet, Berkeley, California 94704.  Funding was partially provided by theNational Science Foundation under grant MIP-9311980.  The original versionof this code was written as part of a project to build a fixed-point vectorprocessor in collaboration with the University of California at Berkeley,overseen by Profs. Nelson Morgan and John Wawrzynek.  More informationis available through the Web page `http://www.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html'.THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort hasbeen made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT TIMESRESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO PERSONSAND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ALL LOSSES,COSTS, OR OTHER PROBLEMS THEY INCUR DUE TO THE SOFTWARE, AND WHO FURTHERMOREEFFECTIVELY INDEMNIFY JOHN HAUSER AND THE INTERNATIONAL COMPUTER SCIENCEINSTITUTE (possibly via similar legal warning) AGAINST ALL LOSSES, COSTS, OROTHER PROBLEMS INCURRED BY THEIR CUSTOMERS AND CLIENTS DUE TO THE SOFTWARE.Derivative works are acceptable, even for commercial purposes, so long as(1) the source code for the derivative work includes prominent notice thatthe work is derivative, and (2) the source code includes prominent notice withthese four paragraphs for those parts of this code that are retained.=============================================================================*/#ifndef SOFTFLOAT_H#define SOFTFLOAT_H#include <inttypes.h>#include "config.h"/*----------------------------------------------------------------------------| Each of the following `typedef's defines the most convenient type that holds| integers of at least as many bits as specified.  For example, `uint8' should| be the most convenient type that can hold unsigned integers of as many as| 8 bits.  The `flag' type must be able to hold either a 0 or 1.  For most| implementations of C, `flag', `uint8', and `int8' should all be `typedef'ed| to the same as `int'.*----------------------------------------------------------------------------*/typedef uint8_t flag;typedef uint8_t uint8;typedef int8_t int8;typedef int uint16;typedef int int16;typedef unsigned int uint32;typedef signed int int32;typedef uint64_t uint64;typedef int64_t int64;/*----------------------------------------------------------------------------| Each of the following `typedef's defines a type that holds integers| of _exactly_ the number of bits specified.  For instance, for most| implementation of C, `bits16' and `sbits16' should be `typedef'ed to| `unsigned short int' and `signed short int' (or `short int'), respectively.*----------------------------------------------------------------------------*/typedef uint8_t bits8;typedef int8_t sbits8;typedef uint16_t bits16;typedef int16_t sbits16;typedef uint32_t bits32;typedef int32_t sbits32;typedef uint64_t bits64;typedef int64_t sbits64;#define LIT64( a ) a##LL#define INLINE static inline/*----------------------------------------------------------------------------| The macro `FLOATX80' must be defined to enable the extended double-precision| floating-point format `floatx80'.  If this macro is not defined, the| `floatx80' type will not be defined, and none of the functions that either| input or output the `floatx80' type will be defined.  The same applies to| the `FLOAT128' macro and the quadruple-precision format `float128'.*----------------------------------------------------------------------------*/#ifdef CONFIG_SOFTFLOAT/* bit exact soft float support */#define FLOATX80#define FLOAT128#else/* native float support */#if (defined(__i386__) || defined(__x86_64__)) && !defined(_BSD)#define FLOATX80#endif#endif /* !CONFIG_SOFTFLOAT */#define STATUS_PARAM , float_status *status#define STATUS(field) status->field#define STATUS_VAR , status/*----------------------------------------------------------------------------| Software IEC/IEEE floating-point ordering relations*----------------------------------------------------------------------------*/enum {    float_relation_less      = -1,    float_relation_equal     =  0,    float_relation_greater   =  1,    float_relation_unordered =  2};#ifdef CONFIG_SOFTFLOAT/*----------------------------------------------------------------------------| Software IEC/IEEE floating-point types.*----------------------------------------------------------------------------*/typedef uint32_t float32;typedef uint64_t float64;#ifdef FLOATX80typedef struct {    uint64_t low;    uint16_t high;} floatx80;#endif#ifdef FLOAT128typedef struct {#ifdef WORDS_BIGENDIAN    uint64_t high, low;#else    uint64_t low, high;#endif} float128;#endif/*----------------------------------------------------------------------------| Software IEC/IEEE floating-point underflow tininess-detection mode.*----------------------------------------------------------------------------*/enum {    float_tininess_after_rounding  = 0,    float_tininess_before_rounding = 1};/*----------------------------------------------------------------------------| Software IEC/IEEE floating-point rounding mode.*----------------------------------------------------------------------------*/enum {    float_round_nearest_even = 0,    float_round_down         = 1,    float_round_up           = 2,    float_round_to_zero      = 3};/*----------------------------------------------------------------------------| Software IEC/IEEE floating-point exception flags.*----------------------------------------------------------------------------*/enum {    float_flag_invalid   =  1,    float_flag_divbyzero =  4,    float_flag_overflow  =  8,    float_flag_underflow = 16,    float_flag_inexact   = 32};typedef struct float_status {    signed char float_detect_tininess;    signed char float_rounding_mode;    signed char float_exception_flags;#ifdef FLOATX80    signed char floatx80_rounding_precision;#endif} float_status;void set_float_rounding_mode(int val STATUS_PARAM);void set_float_exception_flags(int val STATUS_PARAM);INLINE int get_float_exception_flags(float_status *status){    return STATUS(float_exception_flags);}#ifdef FLOATX80void set_floatx80_rounding_precision(int val STATUS_PARAM);#endif/*----------------------------------------------------------------------------| Routine to raise any or all of the software IEC/IEEE floating-point| exception flags.*----------------------------------------------------------------------------*/void float_raise( int8 flags STATUS_PARAM);/*----------------------------------------------------------------------------| Software IEC/IEEE integer-to-floating-point conversion routines.*----------------------------------------------------------------------------*/float32 int32_to_float32( int STATUS_PARAM );float64 int32_to_float64( int STATUS_PARAM );float32 uint32_to_float32( unsigned int STATUS_PARAM );float64 uint32_to_float64( unsigned int STATUS_PARAM );#ifdef FLOATX80floatx80 int32_to_floatx80( int STATUS_PARAM );#endif#ifdef FLOAT128float128 int32_to_float128( int STATUS_PARAM );#endiffloat32 int64_to_float32( int64_t STATUS_PARAM );float64 int64_to_float64( int64_t STATUS_PARAM );#ifdef FLOATX80floatx80 int64_to_floatx80( int64_t STATUS_PARAM );#endif#ifdef FLOAT128float128 int64_to_float128( int64_t STATUS_PARAM );

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -