Annotation of researchv10no/cmd/spitbol/sigs.c, revision 1.1.1.1

1.1       root        1: #define I_ADDF2                0x40
                      2: #define I_ADDF3                0x41
                      3: #define I_DIVF2                0x46
                      4: #define I_DIVF3                0x47
                      5: #define I_MULF2                0x44
                      6: #define I_MULF3                0x45
                      7: #define I_SUBF2                0x42
                      8: #define I_SUBF3                0x43
                      9: 
                     10: #define PC 15
                     11: 
                     12: #include <signal.h>
                     13: 
                     14: void setsigs();
                     15: 
                     16: static void
                     17: ovfltrap (signo, param, xx, pc, psl)
                     18:        unsigned char *pc;
                     19: {
                     20:        register int operands = 2;
                     21:        register unsigned char *rpc = pc;
                     22: 
                     23:        setsigs();              /* trap overflow again */
                     24:        psl |= 02;              /* set the overflow bit */
                     25: 
                     26:        /* Adjust the PC if this is an op code we know about */
                     27:        switch (*rpc) {
                     28: 
                     29:        case I_ADDF3:
                     30:        case I_SUBF3:
                     31:        case I_MULF3:
                     32:        case I_DIVF3:
                     33:                operands++;
                     34: 
                     35:        case I_ADDF2:
                     36:        case I_SUBF2:
                     37:        case I_MULF2:
                     38:        case I_DIVF2:
                     39: 
                     40:                rpc++;
                     41: 
                     42:                do {
                     43: 
                     44:                        /* Fetch and step past the first operand byte */
                     45:                        register int mode = (*rpc & 0xf0) >> 4;
                     46:                        register int reg = *rpc++ & 0xf;
                     47: 
                     48:                        switch (mode) {
                     49: 
                     50:                        case 0:         /* literal */
                     51:                        case 1:         /* literal */
                     52:                        case 2:         /* literal */
                     53:                        case 3:         /* literal */
                     54:                                break;
                     55: 
                     56:                        case 4:         /* [reg] */
                     57:                                operands++;
                     58:                                break;
                     59: 
                     60:                        case 5:         /* reg */
                     61:                        case 6:         /* (reg) */
                     62:                        case 7:         /* -(reg) */
                     63:                                break;
                     64: 
                     65:                        case 8:         /* (reg)+ */
                     66:                                if (reg == PC)
                     67:                                        rpc += sizeof (float);
                     68:                                break;
                     69: 
                     70:                        case 9:         /* autoincrement deferred or absolute */
                     71:                                if (reg == PC)
                     72:                                        rpc += 4;
                     73:                                break;
                     74: 
                     75:                        case 10:        /* byte displacement */
                     76:                        case 11:        /* byte displacement deferred */
                     77:                                rpc++;
                     78:                                break;
                     79: 
                     80:                        case 12:        /* word displacement */
                     81:                        case 13:        /* word displacement deferred */
                     82:                                rpc += 2;
                     83:                                break;
                     84: 
                     85:                        case 14:        /* longword displacement */
                     86:                        case 15:        /* longword displacement deferred */
                     87:                                rpc += 4;
                     88:                                break;
                     89:                        }
                     90:                } while (--operands);
                     91: 
                     92:        }
                     93:        pc = rpc;
                     94: }
                     95: 
                     96: void
                     97: setsigs()
                     98: {
                     99:        signal (SIGFPE, ovfltrap);
                    100: }

unix.superglobalmegacorp.com

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