* compile.c (decode): Use "bit" to hold L_3 immediates instead
of holding them in "abs". Handle ABS8MEM memory references aka 8-bit area. Replace ABSMOV references with ABS8MEM. So we've got a chance of simulating something like btst #0,@40:8 correctly. hmse.
This commit is contained in:
parent
d2f6ce6ac2
commit
e24146ec95
@ -1,3 +1,14 @@
|
||||
Fri Apr 5 17:20:59 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* compile.c (decode): Use "bit" to hold L_3 immediates instead
|
||||
of holding them in "abs". Handle ABS8MEM memory references aka
|
||||
8-bit area. Replace ABSMOV references with ABS8MEM.
|
||||
|
||||
Wed Mar 13 17:43:56 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* compile.c (fetch): Handle accesses to the exception/function
|
||||
vectors.
|
||||
|
||||
Mon Mar 11 09:53:25 1996 Doug Evans <dje@charmed.cygnus.com>
|
||||
|
||||
* compile.c: #include "wait.h".
|
||||
|
@ -153,6 +153,7 @@ decode (addr, data, dst)
|
||||
int rdisp = 0;
|
||||
int abs = 0;
|
||||
int plen = 0;
|
||||
int bit = 0;
|
||||
|
||||
struct h8_opcode *q = h8_opcodes;
|
||||
int size = 0;
|
||||
@ -286,7 +287,13 @@ decode (addr, data, dst)
|
||||
{
|
||||
abs = SEXTCHAR (data[len >> 1]);
|
||||
}
|
||||
else
|
||||
else if (looking_for & ABS8MEM)
|
||||
{
|
||||
plen = 8;
|
||||
abs = h8300hmode ? ~0xff0000ff : ~0xffff00ff;
|
||||
abs |= data[len >> 1] & 0xff ;
|
||||
}
|
||||
else
|
||||
{
|
||||
abs = data[len >> 1] & 0xff;
|
||||
}
|
||||
@ -295,7 +302,7 @@ decode (addr, data, dst)
|
||||
{
|
||||
plen = 3;
|
||||
|
||||
abs = thisnib;
|
||||
bit = thisnib;
|
||||
}
|
||||
else if (looking_for == E)
|
||||
{
|
||||
@ -321,7 +328,12 @@ decode (addr, data, dst)
|
||||
p = &(dst->src);
|
||||
}
|
||||
|
||||
if (x & (IMM | KBIT | DBIT))
|
||||
if (x & (L_3))
|
||||
{
|
||||
p->type = X (OP_IMM, size);
|
||||
p->literal = bit;
|
||||
}
|
||||
else if (x & (IMM | KBIT | DBIT))
|
||||
{
|
||||
p->type = X (OP_IMM, size);
|
||||
p->literal = abs;
|
||||
@ -351,7 +363,7 @@ decode (addr, data, dst)
|
||||
p->reg = rn & 0x7;
|
||||
p->literal = 0;
|
||||
}
|
||||
else if (x & (ABS | ABSJMP | ABSMOV))
|
||||
else if (x & (ABS | ABSJMP | ABS8MEM))
|
||||
{
|
||||
p->type = X (OP_DISP, size);
|
||||
p->literal = abs;
|
||||
@ -574,6 +586,11 @@ fetch (arg, n)
|
||||
t &= cpu.mask;
|
||||
return t;
|
||||
|
||||
case X (OP_MEM, SW):
|
||||
t = GET_MEMORY_W (abs);
|
||||
t &= cpu.mask;
|
||||
return t;
|
||||
|
||||
default:
|
||||
abort ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user