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

📄 float.h

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Linux/PA-RISC Project (http://www.parisc-linux.org/) * * Floating-point emulation code *  Copyright (C) 2001 Hewlett-Packard (Paul Bame) <bame@debian.org> * *    This program is free software; you can redistribute it and/or modify *    it under the terms of the GNU General Public License as published by *    the Free Software Foundation; either version 2, or (at your option) *    any later version. * *    This program is distributed in the hope that it will be useful, *    but WITHOUT ANY WARRANTY; without even the implied warranty of *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *    GNU General Public License for more details. * *    You should have received a copy of the GNU General Public License *    along with this program; if not, write to the Free Software *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* * BEGIN_DESC *  *  File:  *      @(#)	pa/spmath/float.h		$Revision: 1.2 $ *  *  Purpose: *      <<please update with a synopis of the functionality provided by this file>> *  *  BE header:  no * *  Shipped:  yes *	/usr/conf/pa/spmath/float.h * * END_DESC  */#ifdef __NO_PA_HDRS    PA header file -- do not include this header file for non-PA builds.#endif#include "fpbits.h"#include "hppa.h"/* * Want to pick up the FPU capability flags, not the PDC structures. * 'LOCORE' isn't really true in this case, but we don't want the C structures * so it suits our purposes */#define LOCORE#include "fpu.h"/* * Declare the basic structures for the 3 different * floating-point precisions. *         * Single number   * +-------+-------+-------+-------+-------+-------+-------+-------+ * |s|       exp     |               mantissa                      | * +-------+-------+-------+-------+-------+-------+-------+-------+ */#define	Sall(object) (object)#define	Ssign(object) Bitfield_extract( 0,  1,object)#define	Ssignedsign(object) Bitfield_signed_extract( 0,  1,object)#define	Sexponent(object) Bitfield_extract( 1,  8,object)#define	Smantissa(object) Bitfield_mask( 9, 23,object)#define	Ssignaling(object) Bitfield_extract( 9,  1,object)#define	Ssignalingnan(object) Bitfield_extract( 1,  9,object)#define	Shigh2mantissa(object) Bitfield_extract( 9,  2,object)#define	Sexponentmantissa(object) Bitfield_mask( 1, 31,object)#define	Ssignexponent(object) Bitfield_extract( 0,  9,object)#define	Shidden(object) Bitfield_extract( 8,  1,object)#define	Shiddenoverflow(object) Bitfield_extract( 7,  1,object)#define	Shiddenhigh7mantissa(object) Bitfield_extract( 8,  8,object)#define	Shiddenhigh3mantissa(object) Bitfield_extract( 8,  4,object)#define	Slow(object) Bitfield_mask( 31,  1,object)#define	Slow4(object) Bitfield_mask( 28,  4,object)#define	Slow31(object) Bitfield_mask( 1, 31,object)#define	Shigh31(object) Bitfield_extract( 0, 31,object)#define	Ssignedhigh31(object) Bitfield_signed_extract( 0, 31,object)#define	Shigh4(object) Bitfield_extract( 0,  4,object)#define	Sbit24(object) Bitfield_extract( 24,  1,object)#define	Sbit28(object) Bitfield_extract( 28,  1,object)#define	Sbit29(object) Bitfield_extract( 29,  1,object)#define	Sbit30(object) Bitfield_extract( 30,  1,object)#define	Sbit31(object) Bitfield_mask( 31,  1,object)#define Deposit_ssign(object,value) Bitfield_deposit(value,0,1,object)#define Deposit_sexponent(object,value) Bitfield_deposit(value,1,8,object)#define Deposit_smantissa(object,value) Bitfield_deposit(value,9,23,object)#define Deposit_shigh2mantissa(object,value) Bitfield_deposit(value,9,2,object)#define Deposit_sexponentmantissa(object,value) \    Bitfield_deposit(value,1,31,object)#define Deposit_ssignexponent(object,value) Bitfield_deposit(value,0,9,object)#define Deposit_slow(object,value) Bitfield_deposit(value,31,1,object)#define Deposit_shigh4(object,value) Bitfield_deposit(value,0,4,object)#define	Is_ssign(object) Bitfield_mask( 0,  1,object)#define	Is_ssignaling(object) Bitfield_mask( 9,  1,object)#define	Is_shidden(object) Bitfield_mask( 8,  1,object)#define	Is_shiddenoverflow(object) Bitfield_mask( 7,  1,object)#define	Is_slow(object) Bitfield_mask( 31,  1,object)#define	Is_sbit24(object) Bitfield_mask( 24,  1,object)#define	Is_sbit28(object) Bitfield_mask( 28,  1,object)#define	Is_sbit29(object) Bitfield_mask( 29,  1,object)#define	Is_sbit30(object) Bitfield_mask( 30,  1,object)#define	Is_sbit31(object) Bitfield_mask( 31,  1,object)/*  * Double number. * +-------+-------+-------+-------+-------+-------+-------+-------+ * |s|       exponent      |          mantissa part 1              | * +-------+-------+-------+-------+-------+-------+-------+-------+ * * +-------+-------+-------+-------+-------+-------+-------+-------+ * |                    mantissa part 2                            | * +-------+-------+-------+-------+-------+-------+-------+-------+ */#define Dallp1(object) (object)#define Dsign(object) Bitfield_extract( 0,  1,object)#define Dsignedsign(object) Bitfield_signed_extract( 0,  1,object)#define Dexponent(object) Bitfield_extract( 1,  11,object)#define Dmantissap1(object) Bitfield_mask( 12, 20,object)#define Dsignaling(object) Bitfield_extract( 12,  1,object)#define Dsignalingnan(object) Bitfield_extract( 1,  12,object)#define Dhigh2mantissa(object) Bitfield_extract( 12,  2,object)#define Dexponentmantissap1(object) Bitfield_mask( 1, 31,object)#define Dsignexponent(object) Bitfield_extract( 0, 12,object)#define Dhidden(object) Bitfield_extract( 11,  1,object)#define Dhiddenoverflow(object) Bitfield_extract( 10,  1,object)#define Dhiddenhigh7mantissa(object) Bitfield_extract( 11,  8,object)#define Dhiddenhigh3mantissa(object) Bitfield_extract( 11,  4,object)#define Dlowp1(object) Bitfield_mask( 31,  1,object)#define Dlow31p1(object) Bitfield_mask( 1, 31,object)#define Dhighp1(object) Bitfield_extract( 0,  1,object)#define Dhigh4p1(object) Bitfield_extract( 0,  4,object)#define Dhigh31p1(object) Bitfield_extract( 0, 31,object)#define Dsignedhigh31p1(object) Bitfield_signed_extract( 0, 31,object)#define Dbit3p1(object) Bitfield_extract( 3,  1,object)#define Deposit_dsign(object,value) Bitfield_deposit(value,0,1,object)#define Deposit_dexponent(object,value) Bitfield_deposit(value,1,11,object)#define Deposit_dmantissap1(object,value) Bitfield_deposit(value,12,20,object)#define Deposit_dhigh2mantissa(object,value) Bitfield_deposit(value,12,2,object)#define Deposit_dexponentmantissap1(object,value) \    Bitfield_deposit(value,1,31,object)#define Deposit_dsignexponent(object,value) Bitfield_deposit(value,0,12,object)#define Deposit_dlowp1(object,value) Bitfield_deposit(value,31,1,object)#define Deposit_dhigh4p1(object,value) Bitfield_deposit(value,0,4,object)#define Is_dsign(object) Bitfield_mask( 0,  1,object)#define Is_dsignaling(object) Bitfield_mask( 12,  1,object)#define Is_dhidden(object) Bitfield_mask( 11,  1,object)#define Is_dhiddenoverflow(object) Bitfield_mask( 10,  1,object)#define Is_dlowp1(object) Bitfield_mask( 31,  1,object)#define Is_dhighp1(object) Bitfield_mask( 0,  1,object)#define Is_dbit3p1(object) Bitfield_mask( 3,  1,object)#define Dallp2(object) (object)#define Dmantissap2(object) (object)#define Dlowp2(object) Bitfield_mask( 31,  1,object)#define Dlow4p2(object) Bitfield_mask( 28,  4,object)#define Dlow31p2(object) Bitfield_mask( 1, 31,object)#define Dhighp2(object) Bitfield_extract( 0,  1,object)#define Dhigh31p2(object) Bitfield_extract( 0, 31,object)#define Dbit2p2(object) Bitfield_extract( 2,  1,object)#define Dbit3p2(object) Bitfield_extract( 3,  1,object)#define Dbit21p2(object) Bitfield_extract( 21,  1,object)#define Dbit28p2(object) Bitfield_extract( 28,  1,object)#define Dbit29p2(object) Bitfield_extract( 29,  1,object)#define Dbit30p2(object) Bitfield_extract( 30,  1,object)#define Dbit31p2(object) Bitfield_mask( 31,  1,object)#define Deposit_dlowp2(object,value) Bitfield_deposit(value,31,1,object)#define Is_dlowp2(object) Bitfield_mask( 31,  1,object)#define Is_dhighp2(object) Bitfield_mask( 0,  1,object)#define Is_dbit2p2(object) Bitfield_mask( 2,  1,object)#define Is_dbit3p2(object) Bitfield_mask( 3,  1,object)#define Is_dbit21p2(object) Bitfield_mask( 21,  1,object)#define Is_dbit28p2(object) Bitfield_mask( 28,  1,object)#define Is_dbit29p2(object) Bitfield_mask( 29,  1,object)#define Is_dbit30p2(object) Bitfield_mask( 30,  1,object)#define Is_dbit31p2(object) Bitfield_mask( 31,  1,object)/*  * Quad number. * +-------+-------+-------+-------+-------+-------+-------+-------+ * |s|          exponent           |      mantissa part 1          | * +-------+-------+-------+-------+-------+-------+-------+-------+ * * +-------+-------+-------+-------+-------+-------+-------+-------+ * |                    mantissa part 2                            | * +-------+-------+-------+-------+-------+-------+-------+-------+ * * +-------+-------+-------+-------+-------+-------+-------+-------+ * |                    mantissa part 3                            | * +-------+-------+-------+-------+-------+-------+-------+-------+ * * +-------+-------+-------+-------+-------+-------+-------+-------+ * |                    mantissa part 4                            | * +-------+-------+-------+-------+-------+-------+-------+-------+ */typedef struct    {    union	{	struct { unsigned qallp1; } u_qallp1;/* Not needed for now...	Bitfield_extract( 0,  1,u_qsign,qsign)	Bitfield_signed_extract( 0,  1,u_qsignedsign,qsignedsign)	Bitfield_extract( 1, 15,u_qexponent,qexponent)	Bitfield_extract(16, 16,u_qmantissap1,qmantissap1)	Bitfield_extract(16,  1,u_qsignaling,qsignaling)	Bitfield_extract(1,  16,u_qsignalingnan,qsignalingnan)	Bitfield_extract(16,  2,u_qhigh2mantissa,qhigh2mantissa)	Bitfield_extract( 1, 31,u_qexponentmantissap1,qexponentmantissap1)	Bitfield_extract( 0, 16,u_qsignexponent,qsignexponent)	Bitfield_extract(15,  1,u_qhidden,qhidden)	Bitfield_extract(14,  1,u_qhiddenoverflow,qhiddenoverflow)	Bitfield_extract(15,  8,u_qhiddenhigh7mantissa,qhiddenhigh7mantissa)	Bitfield_extract(15,  4,u_qhiddenhigh3mantissa,qhiddenhigh3mantissa)	Bitfield_extract(31,  1,u_qlowp1,qlowp1)	Bitfield_extract( 1, 31,u_qlow31p1,qlow31p1)	Bitfield_extract( 0,  1,u_qhighp1,qhighp1)	Bitfield_extract( 0,  4,u_qhigh4p1,qhigh4p1)	Bitfield_extract( 0, 31,u_qhigh31p1,qhigh31p1)  */	} quad_u1;    union	{	struct { unsigned qallp2; } u_qallp2;  /* Not needed for now...	Bitfield_extract(31,  1,u_qlowp2,qlowp2)	Bitfield_extract( 1, 31,u_qlow31p2,qlow31p2)	Bitfield_extract( 0,  1,u_qhighp2,qhighp2)	Bitfield_extract( 0, 31,u_qhigh31p2,qhigh31p2)   */	} quad_u2;    union	{	struct { unsigned qallp3; } u_qallp3;  /* Not needed for now...	Bitfield_extract(31,  1,u_qlowp3,qlowp3)	Bitfield_extract( 1, 31,u_qlow31p3,qlow31p3)	Bitfield_extract( 0,  1,u_qhighp3,qhighp3)	Bitfield_extract( 0, 31,u_qhigh31p3,qhigh31p3)   */ 	} quad_u3;    union	{	struct { unsigned qallp4; } u_qallp4;    /* Not need for now...	Bitfield_extract(31,  1,u_qlowp4,qlowp4)	Bitfield_extract( 1, 31,u_qlow31p4,qlow31p4)	Bitfield_extract( 0,  1,u_qhighp4,qhighp4)	Bitfield_extract( 0, 31,u_qhigh31p4,qhigh31p4)     */	} quad_u4;    } quad_floating_point;/* Extension - An additional structure to hold the guard, round and *             sticky bits during computations. */#define Extall(object) (object)#define Extsign(object) Bitfield_extract( 0,  1,object)#define Exthigh31(object) Bitfield_extract( 0, 31,object)#define Extlow31(object) Bitfield_extract( 1, 31,object)#define Extlow(object) Bitfield_extract( 31,  1,object)/* * Single extended - The upper word is just like single precision, *                 but one additional word of mantissa is needed. */#define Sextallp1(object) (object)#define Sextallp2(object) (object)#define Sextlowp1(object) Bitfield_extract( 31,  1,object)#define Sexthighp2(object) Bitfield_extract( 0,  1,object)#define Sextlow31p2(object) Bitfield_extract( 1, 31,object)#define Sexthiddenoverflow(object) Bitfield_extract( 4,  1,object)#define Is_sexthiddenoverflow(object) Bitfield_mask( 4,  1,object)/* * Double extended - The upper two words are just like double precision, *		     but two additional words of mantissa are needed. */#define Dextallp1(object) (object)#define Dextallp2(object) (object)#define Dextallp3(object) (object)#define Dextallp4(object) (object)#define Dextlowp2(object) Bitfield_extract( 31,  1,object)#define Dexthighp3(object) Bitfield_extract( 0,  1,object)#define Dextlow31p3(object) Bitfield_extract( 1, 31,object)

⌨️ 快捷键说明

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