00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef IEEE_FLOAT_H
00010 #define IEEE_FLOAT_H
00011
00012 #define isnan __IsNan
00013
00014 struct f64
00015 {
00016 u32_t low_word;
00017 u32_t high_word;
00018 };
00019
00020 #define F64_SIGN_SHIFT 31
00021 #define F64_SIGN_MASK 1
00022
00023 #define F64_EXP_SHIFT 20
00024 #define F64_EXP_MASK 0x7ff
00025 #define F64_EXP_BIAS 1023
00026 #define F64_EXP_MAX 2047
00027
00028 #define F64_MANT_SHIFT 0
00029 #define F64_MANT_MASK 0xfffff
00030
00031 #define F64_GET_SIGN(fp) (((fp)->high_word >> F64_SIGN_SHIFT) & \
00032 F64_SIGN_MASK)
00033 #define F64_GET_EXP(fp) (((fp)->high_word >> F64_EXP_SHIFT) & \
00034 F64_EXP_MASK)
00035 #define F64_SET_EXP(fp, val) ((fp)->high_word= ((fp)->high_word & \
00036 ~(F64_EXP_MASK << F64_EXP_SHIFT)) | \
00037 (((val) & F64_EXP_MASK) << F64_EXP_SHIFT))
00038
00039 #define F64_GET_MANT_LOW(fp) ((fp)->low_word)
00040 #define F64_SET_MANT_LOW(fp, val) ((fp)->low_word= (val))
00041 #define F64_GET_MANT_HIGH(fp) (((fp)->high_word >> F64_MANT_SHIFT) & \
00042 F64_MANT_MASK)
00043 #define F64_SET_MANT_HIGH(fp, val) ((fp)->high_word= ((fp)->high_word & \
00044 ~(F64_MANT_MASK << F64_MANT_SHIFT)) | \
00045 (((val) & F64_MANT_MASK) << F64_MANT_SHIFT))
00046
00047 #endif
00048
00049
00050
00051