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