|
|
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.