aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/mn10300/ChangeLog4
-rw-r--r--sim/mn10300/gencode.c25
-rw-r--r--sim/mn10300/mn10300_sim.h1
3 files changed, 27 insertions, 3 deletions
diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog
index 7f66829..ca03f32 100644
--- a/sim/mn10300/ChangeLog
+++ b/sim/mn10300/ChangeLog
@@ -1,3 +1,7 @@
+Tue Nov 26 13:36:01 1996 Jeffrey A Law (law@cygnus.com)
+
+ * gencode.c, interp.c: Snapshot current simulator code.
+
Mon Nov 25 12:46:38 1996 Jeffrey A Law (law@cygnus.com)
* Makefile.in, config.in, configure, configure.in: New files.
diff --git a/sim/mn10300/gencode.c b/sim/mn10300/gencode.c
index d2f5e3b..543bce6 100644
--- a/sim/mn10300/gencode.c
+++ b/sim/mn10300/gencode.c
@@ -95,8 +95,27 @@ write_opcodes ()
for (opcode = (struct mn10300_opcode *)mn10300_opcodes; opcode->name; opcode++)
{
- printf (" { 0x%x,0x%x,OP_%X,",
- opcode->opcode, opcode->mask, opcode->opcode);
+ int size;
+
+ if (opcode->format == FMT_S0)
+ size = 1;
+ else if (opcode->format == FMT_S1
+ || opcode->format == FMT_D0)
+ size = 2;
+ else if (opcode->format == FMT_S2
+ || opcode->format == FMT_D1)
+ size = 3;
+ else if (opcode->format == FMT_S4)
+ size = 5;
+ else if (opcode->format == FMT_D2)
+ size = 4;
+ else if (opcode->format == FMT_D4)
+ size = 6;
+ else
+ size = 7;
+
+ printf (" { 0x%x,0x%x,OP_%X,%d,",
+ opcode->opcode, opcode->mask, opcode->opcode, size);
Opcodes[curop++] = opcode->opcode;
@@ -139,5 +158,5 @@ write_opcodes ()
printf ("}},\n");
}
- printf ("{ 0,0,NULL,0,{0,0,0,0,0,0}},\n};\n");
+ printf ("{ 0,0,NULL,0,0,{0,0,0,0,0,0}},\n};\n");
}
diff --git a/sim/mn10300/mn10300_sim.h b/sim/mn10300/mn10300_sim.h
index b18dee8..4170c26 100644
--- a/sim/mn10300/mn10300_sim.h
+++ b/sim/mn10300/mn10300_sim.h
@@ -50,6 +50,7 @@ struct simops
long opcode;
long mask;
void (*func)();
+ int length;
int numops;
int operands[16];
};