📄 float.h
字号:
/* * 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 + -