|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.