+Mon Apr 8 23:58:49 1996 Jeffrey A Law (law@cygnus.com)
+
+ * compile.c (sim_resume): Fix overflow checks for ALU insns.
+
Fri Apr 5 17:20:59 1996 Jeffrey A Law (law@cygnus.com)
* compile.c (decode): Use "bit" to hold L_3 immediates instead
just_flags_alu8:
n = res & 0x80;
nz = res & 0xff;
- v = ((ea & 0x80) == (rd & 0x80)) && ((ea & 0x80) != (res & 0x80));
c = (res & 0x100);
+ switch (code->opcode / 4)
+ {
+ case O_ADD:
+ v = ((rd & 0x80) == (ea & 0x80)
+ && (rd & 0x80) != (res & 0x80));
+ break;
+ case O_SUB:
+ case O_CMP:
+ v = ((rd & 0x80) != (-ea & 0x80)
+ && (rd & 0x80) != (res & 0x80));
+ break;
+ case O_NEG:
+ v = (rd == 0x80);
+ break;
+ }
goto next;
alu16:
just_flags_alu16:
n = res & 0x8000;
nz = res & 0xffff;
- v = ((ea & 0x8000) == (rd & 0x8000)) && ((ea & 0x8000) != (res & 0x8000));
c = (res & 0x10000);
+ switch (code->opcode / 4)
+ {
+ case O_ADD:
+ v = ((rd & 0x8000) == (ea & 0x8000)
+ && (rd & 0x8000) != (res & 0x8000));
+ break;
+ case O_SUB:
+ case O_CMP:
+ v = ((rd & 0x8000) != (-ea & 0x8000)
+ && (rd & 0x8000) != (res & 0x8000));
+ break;
+ case O_NEG:
+ v = (rd == 0x8000);
+ break;
+ }
goto next;
alu32:
just_flags_alu32:
n = res & 0x80000000;
nz = res & 0xffffffff;
- v = ((ea & 0x80000000) == (rd & 0x80000000))
- && ((ea & 0x80000000) != (res & 0x80000000));
+ switch (code->opcode / 4)
+ {
+ case O_ADD:
+ v = ((rd & 0x80000000) == (ea & 0x80000000)
+ && (rd & 0x80000000) != (res & 0x80000000));
+ break;
+ case O_SUB:
+ case O_CMP:
+ v = ((rd & 0x80000000) != (-ea & 0x80000000)
+ && (rd & 0x80000000) != (res & 0x80000000));
+ break;
+ case O_NEG:
+ v = (rd == 0x80000000);
+ break;
+ }
+ goto next;
switch (code->opcode / 4)
{
case O_ADD: