|
|
1.1 ! root 1: /* ! 2: * ! 3: * @(#)traper_.s 8/27/85 ! 4: * ! 5: * ! 6: * To use from f77: ! 7: * integer oldmsk, traper ! 8: * oldmsk = traper (mask) ! 9: * where: ! 10: * mask = 0 to trap neither ! 11: * mask = 1 to trap integer overflow ! 12: * mask = 2 to trap floating underflow ! 13: * mask = 3 to trap both ! 14: * These 2 bits will be set into the PSL. ! 15: * The old state will be returned. ! 16: * Assumptions: ! 17: * - the two bits are contiguous in PSL; ! 18: * - integer overflow trap enable bit < floating underflow trap enable bit; ! 19: */ ! 20: ! 21: # include <machine/psl.h> ! 22: ! 23: unsigned long old_msk; ! 24: unsigned short new_msk; ! 25: unsigned long tst_msk; ! 26: ! 27: long traper_(msk) ! 28: long *msk; ! 29: { ! 30: #define IOV_MASK (PSL_IV | PSL_FU) ! 31: #define IOV_DISP 5 ! 32: ! 33: asm(" movpsl _old_msk"); ! 34: ! 35: old_msk = (old_msk & IOV_MASK) >> IOV_DISP; ! 36: ! 37: new_msk = (*msk << IOV_DISP) & IOV_MASK; ! 38: asm(" bispsw _new_msk"); ! 39: ! 40: new_msk = ~(*msk << IOV_DISP) & IOV_MASK; ! 41: asm(" bicpsw _new_msk"); ! 42: ! 43: return(old_msk); ! 44: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.