File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / usr / src / usr.lib / libF77 / traper_.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:28:02 2019 UTC (7 years ago) by root
Branches: bsd, MAIN
CVS tags: v121, HEAD
Power 6/32 Unix version 1.21

/*
 *
 *	@(#)traper_.s	8/27/85
 *
 *
 * To use from f77:
 *	integer oldmsk, traper
 *	oldmsk = traper (mask)
 * where:
 *	mask = 0 to trap neither
 *	mask = 1 to trap integer overflow
 *	mask = 2 to trap floating underflow
 *	mask = 3 to trap both
 *	These 2 bits will be set into the PSL.
 *	The old state will be returned.
 * Assumptions:
 *	- the two bits are contiguous in PSL;
 *	- integer overflow trap enable bit < floating underflow trap enable bit;
 */

# include <machine/psl.h>

unsigned long old_msk;
unsigned short new_msk;
unsigned long tst_msk;

long traper_(msk)
long	*msk;
{
#define IOV_MASK (PSL_IV | PSL_FU)
#define IOV_DISP 5

	asm("	movpsl _old_msk");

	old_msk = (old_msk & IOV_MASK) >> IOV_DISP;

	new_msk = (*msk << IOV_DISP) & IOV_MASK;
	asm("	bispsw _new_msk");

	new_msk = ~(*msk << IOV_DISP) & IOV_MASK;
	asm("	bicpsw _new_msk");

	return(old_msk);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.