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

📄 denormal.c

📁 这个linux源代码是很全面的~基本完整了~使用c编译的~由于时间问题我没有亲自测试~但就算用来做参考资料也是非常好的
💻 C
字号:
/* * 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/fp/denormal.c		$ Revision: $ * *  Purpose: *	<<please update with a synopsis of the functionality provided by this file>> * *  External Interfaces: *	<<the following list was autogenerated, please review>> *	dbl_denormalize(dbl_opndp1,dbl_opndp2,inexactflag,rmode) *	sgl_denormalize(sgl_opnd,inexactflag,rmode) * *  Internal Interfaces: *	<<please update>> * *  Theory: *	<<please update with a overview of the operation of this file>> * * END_DESC*/#include "float.h"#include "sgl_float.h"#include "dbl_float.h"#include "hppa.h"#include "types.h"/* #include <machine/sys/mdep_private.h> */#undef Fpustatus_register#define Fpustatus_register Fpu_register[0]voidsgl_denormalize(unsigned int *sgl_opnd, boolean *inexactflag, int rmode){	unsigned int opnd;	int sign, exponent;	boolean guardbit = FALSE, stickybit, inexact;	opnd = *sgl_opnd;	stickybit = *inexactflag;        exponent = Sgl_exponent(opnd) - SGL_WRAP;        sign = Sgl_sign(opnd);	Sgl_denormalize(opnd,exponent,guardbit,stickybit,inexact);	if (inexact) {	    switch (rmode) {	      case ROUNDPLUS:		if (sign == 0) {			Sgl_increment(opnd);		}		break;	      case ROUNDMINUS:		if (sign != 0) {			Sgl_increment(opnd);		}		break;	      case ROUNDNEAREST:		if (guardbit && (stickybit || 		       Sgl_isone_lowmantissa(opnd))) {			   Sgl_increment(opnd);		}		break;	    }	}	Sgl_set_sign(opnd,sign);	*sgl_opnd = opnd;	*inexactflag = inexact;	return;}voiddbl_denormalize(unsigned int *dbl_opndp1,	unsigned int * dbl_opndp2,	boolean *inexactflag,	int rmode){	unsigned int opndp1, opndp2;	int sign, exponent;	boolean guardbit = FALSE, stickybit, inexact;	opndp1 = *dbl_opndp1;	opndp2 = *dbl_opndp2;	stickybit = *inexactflag;	exponent = Dbl_exponent(opndp1) - DBL_WRAP;	sign = Dbl_sign(opndp1);	Dbl_denormalize(opndp1,opndp2,exponent,guardbit,stickybit,inexact);	if (inexact) {	    switch (rmode) {	      case ROUNDPLUS:		if (sign == 0) {			Dbl_increment(opndp1,opndp2);		}		break;	      case ROUNDMINUS:		if (sign != 0) {			Dbl_increment(opndp1,opndp2);		}		break;	      case ROUNDNEAREST:		if (guardbit && (stickybit || 		       Dbl_isone_lowmantissap2(opndp2))) {			   Dbl_increment(opndp1,opndp2);		}		break;	    }	}	Dbl_set_sign(opndp1,sign);	*dbl_opndp1 = opndp1;	*dbl_opndp2 = opndp2;	*inexactflag = inexact;	return;}

⌨️ 快捷键说明

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