aboutsummaryrefslogtreecommitdiff
path: root/sim/v850/simops.c
diff options
context:
space:
mode:
Diffstat (limited to 'sim/v850/simops.c')
-rw-r--r--sim/v850/simops.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/sim/v850/simops.c b/sim/v850/simops.c
index 31c56c4..7ac1a44 100644
--- a/sim/v850/simops.c
+++ b/sim/v850/simops.c
@@ -291,11 +291,32 @@ OP_58F ()
State.pc += 2;
}
+/* jmp [reg1] */
void
-OP_660 ()
+OP_60 ()
{
+ /* interp.c will bump this by +2, so correct for it here. */
+ State.pc = State.regs[OP[0]] - 2;
}
+/* jarl disp22, reg */
+void
+OP_780 ()
+{
+ unsigned int op0, opc;
+ int temp;
+
+ temp = OP[0];
+ temp = (temp << 10) >> 10;
+ op0 = temp;
+ opc = State.pc;
+
+ State.pc += temp;
+
+ /* Gross. jarl X,r0 is really jr and doesn't save its result. */
+ if (OP[1] != 0)
+ State.regs[OP[1]] = opc + 4;
+}
/* add reg, reg */
void
@@ -642,21 +663,11 @@ OP_10720 ()
}
void
-OP_780 ()
-{
-}
-
-void
OP_720 ()
{
}
void
-OP_60 ()
-{
-}
-
-void
OP_87C0 ()
{
}
@@ -1094,3 +1105,8 @@ OP_700 ()
{
}
+void
+OP_660 ()
+{
+}
+