mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-02-17 13:10:12 +08:00
* compile.c (sim_resume): Fix overflow checks for ALU insns.
So that int-compare.c passes.
This commit is contained in:
parent
75eb523103
commit
50d45d1b2f
@ -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
|
||||
|
@ -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:
|
||||
|
Loading…
Reference in New Issue
Block a user