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

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

unix.superglobalmegacorp.com

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