* compile.c (sim_resume): Fix overflow checks for ALU insns.

So that int-compare.c passes.
This commit is contained in:
Jeff Law 1996-04-09 05:57:15 +00:00
parent 75eb523103
commit 50d45d1b2f
2 changed files with 50 additions and 4 deletions

View File

@ -1,3 +1,7 @@
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

View File

@ -1508,8 +1508,22 @@ sim_resume (step, siggnal)
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:
@ -1517,8 +1531,22 @@ sim_resume (step, siggnal)
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:
@ -1526,8 +1554,22 @@ sim_resume (step, siggnal)
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: