checked in for jerry
[unix-history] / usr / src / usr.bin / f77 / libF77 / traper_.c
CommitLineData
2d8189f2 1/*
42a118aa
RE
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved. The Berkeley software License Agreement
4 * specifies the terms and conditions for redistribution.
5 *
af857331 6 * @(#)traper_.c 5.3 %G%
a2b867fb 7 *
2d8189f2
DW
8 * Full of Magic! DON'T CHANGE ANYTHING !!
9 *
10 * To use from f77:
11 * integer oldmsk, traper
12 * oldmsk = traper (mask)
af857331 13 * where for vax:
2d8189f2
DW
14 * mask = 1 to trap integer overflow
15 * mask = 2 to trap floating underflow
16 * mask = 3 to trap both
17 * These 2 bits will be set into the PSW.
18 * The old state will be returned.
af857331
KM
19 *
20 * where for CCI:
21 * mask = 0 to trap neither
22 * mask = 1 to trap integer overflow
23 * mask = 2 to trap floating underflow
24 * mask = 3 to trap both
25 * These 2 bits will be set into the PSL.
26 * The old state will be returned.
2d8189f2
DW
27 */
28
af857331 29#ifdef vax
2d8189f2
DW
30long traper_(msk)
31long *msk;
32{
33 int old = 0;
2d8189f2
DW
34#define IOV_MASK 0140
35 int **s = &msk;
36 int psw;
37
38 s -= 5;
39 psw = (int)*s;
40 old = (psw & IOV_MASK) >> 5;
41 psw = (psw & ~IOV_MASK) | ((*msk << 5) & IOV_MASK);
42 *s = (int *)psw;
2d8189f2
DW
43 return((long)old);
44}
af857331
KM
45#endif vax
46
47/*
48 * Assumptions for CCI:
49 * - the two bits are contiguous in PSL;
50 * - integer overflow trap enable bit < floating underflow trap enable bit;
51 */
52#ifdef tahoe
53# include <machine/psl.h>
54
55unsigned long old_msk;
56unsigned short new_msk;
57unsigned long tst_msk;
58
59long traper_(msk)
60long *msk;
61{
62#define IOV_MASK (PSL_IV | PSL_FU)
63#define IOV_DISP 5
64
65 asm(" movpsl _old_msk");
66
67 old_msk = (old_msk & IOV_MASK) >> IOV_DISP;
68
69 new_msk = (*msk << IOV_DISP) & IOV_MASK;
70 asm(" bispsw _new_msk");
71
72 new_msk = ~(*msk << IOV_DISP) & IOV_MASK;
73 asm(" bicpsw _new_msk");
74
75 return(old_msk);
76}
77#endif tahoe