Annotation of 43BSDTahoe/usr.lib/libF77/traper_.c, revision 1.1.1.1

1.1       root        1: /*
                      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:  *
                      6:  *     @(#)traper_.c   5.3     11/3/86
                      7:  *
                      8:  * Full of Magic! DON'T CHANGE ANYTHING !!
                      9:  *
                     10:  * To use from f77:
                     11:  *     integer oldmsk, traper
                     12:  *     oldmsk = traper (mask)
                     13:  * where for vax:
                     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.
                     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.
                     27:  */
                     28: 
                     29: #ifdef vax
                     30: long traper_(msk)
                     31: long   *msk;
                     32: {
                     33:        int     old = 0;
                     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;
                     43:        return((long)old);
                     44: }
                     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: 
                     55: unsigned long old_msk;
                     56: unsigned short new_msk;
                     57: unsigned long tst_msk;
                     58: 
                     59: long traper_(msk)
                     60: long   *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

unix.superglobalmegacorp.com

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