* 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:
Jeff Law 1996-04-06 00:21:35 +00:00
parent d2f6ce6ac2
commit e24146ec95
2 changed files with 32 additions and 4 deletions

View File

@ -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".

View File

@ -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 ();