* interp.c (do_format_4): Get operands correctly and
call the target function. * simops.c: Rough cut at "sld.b", "sld.h", "sld.w", "sst.b", "sst.h", and "sst.w".
This commit is contained in:
parent
28647e4c0c
commit
3cb6bf7818
3 changed files with 61 additions and 0 deletions
|
@ -1,5 +1,10 @@
|
|||
Thu Aug 29 13:53:29 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* interp.c (do_format_4): Get operands correctly and
|
||||
call the target function.
|
||||
* simops.c: Rough cut at "sld.b", "sld.h", "sld.w", "sst.b",
|
||||
"sst.h", and "sst.w".
|
||||
|
||||
* v850_sim.h: The V850 doesn't have split I&D spaces. Change
|
||||
accordingly. Remove many unused definitions.
|
||||
* interp.c: The V850 doesn't have split I&D spaces. Change
|
||||
|
|
|
@ -154,7 +154,13 @@ static void
|
|||
do_format_4 (insn)
|
||||
uint32 insn;
|
||||
{
|
||||
struct hash_entry *h;
|
||||
printf("format 4 0x%x\n", insn);
|
||||
|
||||
h = lookup_hash (insn);
|
||||
OP[0] = (insn >> 11) & 0x1f;
|
||||
OP[1] = (insn & 0x7f);
|
||||
(h->ops->func) ();
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -6,36 +6,86 @@
|
|||
void
|
||||
OP_300 ()
|
||||
{
|
||||
unsigned int op0, op1, op2;
|
||||
int result, temp;
|
||||
|
||||
temp = OP[1];
|
||||
temp = (temp << 25) >> 25;
|
||||
op2 = temp;
|
||||
result = get_byte (State.mem + State.regs[30] + op2);
|
||||
result = (result << 24) >> 24;
|
||||
State.regs[OP[0]] = result;
|
||||
}
|
||||
|
||||
/* sld.h */
|
||||
void
|
||||
OP_400 ()
|
||||
{
|
||||
unsigned int op0, op1, op2;
|
||||
int result, temp;
|
||||
|
||||
temp = OP[1];
|
||||
temp = (temp << 25) >> 25;
|
||||
op2 = temp << 1;
|
||||
result = get_half (State.mem + State.regs[30] + op2);
|
||||
result = (result << 16) >> 16;
|
||||
State.regs[OP[0]] = result;
|
||||
}
|
||||
|
||||
/* sld.w */
|
||||
void
|
||||
OP_500 ()
|
||||
{
|
||||
unsigned int op0, op1, op2;
|
||||
int result, temp;
|
||||
|
||||
temp = OP[1];
|
||||
temp = (temp << 25) >> 25;
|
||||
op2 = temp << 2;
|
||||
result = get_word (State.mem + State.regs[30] + op2);
|
||||
State.regs[OP[0]] = result;
|
||||
}
|
||||
|
||||
/* sst.b */
|
||||
void
|
||||
OP_380 ()
|
||||
{
|
||||
unsigned int op0, op1, op2;
|
||||
int result, temp;
|
||||
|
||||
op0 = State.regs[OP[0]];
|
||||
temp = OP[1];
|
||||
temp = (temp << 25) >> 25;
|
||||
op1 = temp;
|
||||
put_byte (State.mem + State.regs[30] + op1, op0);
|
||||
}
|
||||
|
||||
/* sst.h */
|
||||
void
|
||||
OP_480 ()
|
||||
{
|
||||
unsigned int op0, op1, op2;
|
||||
int result, temp;
|
||||
|
||||
op0 = State.regs[OP[0]];
|
||||
temp = OP[1];
|
||||
temp = (temp << 25) >> 25;
|
||||
op1 = temp << 1;
|
||||
put_half (State.mem + State.regs[30] + op1, op0);
|
||||
}
|
||||
|
||||
/* sst.w */
|
||||
void
|
||||
OP_501 ()
|
||||
{
|
||||
unsigned int op0, op1, op2;
|
||||
int result, temp;
|
||||
|
||||
op0 = State.regs[OP[0]];
|
||||
temp = OP[1];
|
||||
temp = (temp << 25) >> 25;
|
||||
op1 = temp << 2;
|
||||
put_word (State.mem + State.regs[30] + op1, op0);
|
||||
}
|
||||
|
||||
/* ld.b */
|
||||
|
|
Loading…
Reference in a new issue