* gencode.c (write_header): Add "insn" and "extension" arguments
authorJeff Law <law@redhat.com>
Fri, 6 Dec 1996 21:19:37 +0000 (21:19 +0000)
committerJeff Law <law@redhat.com>
Fri, 6 Dec 1996 21:19:37 +0000 (21:19 +0000)
        to the OP_* declarations.
        (write_template): Similarly for function templates.
        * interp.c (insn, extension): Remove global variables.  Instead
        pass them as arguments to the OP_* functions.
        * mn10300_sim.h: Remove decls for "insn" and "extension".
        * simops.c (OP_*): Accept "insn" and "extension" as arguments
        instead of using globals.
Starting to clean things up.

sim/mn10300/ChangeLog
sim/mn10300/gencode.c
sim/mn10300/interp.c
sim/mn10300/mn10300_sim.h
sim/mn10300/simops.c

index 1f45f27..7eb085e 100644 (file)
@@ -1,3 +1,14 @@
+Fri Dec  6 14:13:34 1996  Jeffrey A Law  (law@cygnus.com)
+
+       * gencode.c (write_header): Add "insn" and "extension" arguments
+       to the OP_* declarations.
+       (write_template): Similarly for function templates.
+       * interp.c (insn, extension): Remove global variables.  Instead
+       pass them as arguments to the OP_* functions.
+       * mn10300_sim.h: Remove decls for "insn" and "extension".
+       * simops.c (OP_*): Accept "insn" and "extension" as arguments
+       instead of using globals.
+
 Thu Dec  5 22:26:31 1996  Jeffrey A Law  (law@cygnus.com)
 
        * simops.c: Fix typos in "mov am,(d16,an)" and "mov am,(d32,an)"
index 543bce6..06a14ff 100644 (file)
@@ -28,7 +28,7 @@ write_header ()
   struct mn10300_opcode *opcode;
 
   for (opcode = (struct mn10300_opcode *)mn10300_opcodes; opcode->name; opcode++)
-    printf("void OP_%X PARAMS ((void));\t\t/* %s */\n",
+    printf("void OP_%X PARAMS ((unsigned long, unsigned long));\t\t/* %s */\n",
           opcode->opcode, opcode->name);
 }
 
@@ -47,7 +47,7 @@ write_template ()
 
   for (opcode = (struct mn10300_opcode *)mn10300_opcodes; opcode->name; opcode++)
     {
-      printf("/* %s */\nvoid\nOP_%X ()\n{\n", opcode->name, opcode->opcode);
+      printf("/* %s */\nvoid\nOP_%X ()\n     unsigned long insn, extension;\n{\n", opcode->name, opcode->opcode);
          
       /* count operands */
       j = 0;
index cf0d713..a85c265 100644 (file)
@@ -17,10 +17,9 @@ int mn10300_debug;
 
 uint32 OP[4];
 
-static struct hash_entry *lookup_hash PARAMS ((uint32 ins));
+static struct hash_entry *lookup_hash PARAMS ((uint32 ins, int));
 static long hash PARAMS ((long));
 static void init_system PARAMS ((void));
-
 #define MAX_HASH  63
 
 struct hash_entry
@@ -34,22 +33,83 @@ struct hash_entry
 struct hash_entry hash_table[MAX_HASH+1];
 
 
+/* This probably doesn't do a very good job at bucket filling, but
+   it's simple... */
 static INLINE long 
 hash(insn)
      long insn;
 {
-/* XXX */
+  /* These are one byte insns.  */
+  if ((insn & 0xffffff00) == 0)
+    {
+      if ((insn & 0xf0) == 0x00
+         || (insn & 0xf0) == 0x40)
+       return (insn & 0xf3) & 0x3f;
+
+      if ((insn & 0xf0) == 0x10
+         || (insn & 0xf0) == 0x30
+         || (insn & 0xf0) == 0x50)
+       return (insn & 0xfc) & 0x3f;
+
+      if ((insn & 0xf0) == 0x60
+         || (insn & 0xf0) == 0x70
+         || (insn & 0xf0) == 0x80
+         || (insn & 0xf0) == 0x90
+         || (insn & 0xf0) == 0xa0
+         || (insn & 0xf0) == 0xb0
+         || (insn & 0xf0) == 0xe0)
+       return (insn & 0xf0) & 0x3f;
+
+      return (insn & 0xff) & 0x3f;
+    }
+
+  /* These are two byte insns */
+  if ((insn & 0xffff0000) == 0)
+    {
+      if ((insn & 0xf000) == 0x2000
+         || (insn & 0xf000) == 0x5000)
+       return ((insn & 0xfc00) >> 8) & 0x3f;
+
+      if ((insn & 0xf000) == 0x4000)
+       return ((insn & 0xf300) >> 8) & 0x3f;
+
+      if ((insn & 0xf000) == 0x8000
+         || (insn & 0xf000) == 0x9000
+         || (insn & 0xf000) == 0xa000
+         || (insn & 0xf000) == 0xb000)
+       return ((insn & 0xf000) >> 8) & 0x3f;
+
+      return ((insn & 0xff00) >> 8) & 0x3f;
+    }
+
+  /* These are three byte insns.  */
+  if ((insn & 0xff000000) == 0)
+    {
+      if ((insn & 0xf00000) == 0x000000)
+       return ((insn & 0xf30000) >> 16) & 0x3f;
+
+      if ((insn & 0xf00000) == 0x200000
+         || (insn & 0xf00000) == 0x300000)
+       return ((insn & 0xfc0000) >> 16) & 0x3f;
+
+        return ((insn & 0xff0000) >> 16) & 0x3f;
+    }
+
+  /* These are four byte or larger insns.  */
+  return ((insn & 0xff000000) >> 24) & 0x3f;
 }
 
 static struct hash_entry *
-lookup_hash (ins)
+lookup_hash (ins, length)
      uint32 ins;
+     int length;
 {
   struct hash_entry *h;
 
   h = &hash_table[hash(ins)];
 
-  while ((ins & h->mask) != h->opcode)
+  while ((ins & h->mask) != h->opcode
+        || (length != h->ops->length))
     {
       if (h->next == NULL)
        {
@@ -120,6 +180,28 @@ put_word (addr, data)
 
 
 uint32
+load_mem_big (addr, len)
+     SIM_ADDR addr;
+     int len;
+{
+  uint8 *p = addr + State.mem;
+
+  switch (len)
+    {
+    case 1:
+      return p[0];
+    case 2:
+      return p[0] << 8 | p[1];
+    case 3:
+      return p[0] << 16 | p[1] << 8 | p[2];
+    case 4:
+      return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3];
+    default:
+      abort ();
+    }
+}
+
+uint32
 load_mem (addr, len)
      SIM_ADDR addr;
      int len;
@@ -132,6 +214,8 @@ load_mem (addr, len)
       return p[0];
     case 2:
       return p[1] << 8 | p[0];
+    case 3:
+      return p[2] << 16 | p[1] << 8 | p[0];
     case 4:
       return p[3] << 24 | p[2] << 16 | p[1] << 8 | p[0];
     default:
@@ -270,7 +354,7 @@ sim_resume (step, siggnal)
 {
   uint32 inst, opcode;
   reg_t oldpc;
-  struct interrupt_generator *intgen;
+  struct hash_entry *h;
 
   if (step)
     State.exception = SIGTRAP;
@@ -279,15 +363,137 @@ sim_resume (step, siggnal)
 
   do
     {
+      unsigned long insn, extension;
+
       /* Fetch the current instruction.  */
-      inst = RLW (PC);
+      inst = load_mem_big (PC, 1);
       oldpc = PC;
-      opcode = (inst & 0x07e0) >> 5;
 
-      /* Decode the opcode field. */
-      if ((opcode & 0x30) == 0
-         || (opcode & 0x38) == 0x10)
+      /* These are one byte insns.  */
+      if ((inst & 0xf3) == 0x00
+         || (inst & 0xf0) == 0x10
+         || (inst & 0xfc) == 0x3c
+         || (inst & 0xf3) == 0x41
+         || (inst & 0xf3) == 0x40
+         || (inst & 0xfc) == 0x50
+         || (inst & 0xfc) == 0x54
+         || (inst & 0xf0) == 0x60
+         || (inst & 0xf0) == 0x70
+         || ((inst & 0xf0) == 0x80
+             && (inst & 0x0c) >> 2 != (inst & 0x03))
+         || ((inst & 0xf0) == 0x90
+             && (inst & 0x0c) >> 2 != (inst & 0x03))
+         || ((inst & 0xf0) == 0xa0
+             && (inst & 0x0c) >> 2 != (inst & 0x03))
+         || ((inst & 0xf0) == 0xb0
+             && (inst & 0x0c) >> 2 != (inst & 0x03))
+         || (inst & 0xff) == 0xcb
+         || (inst & 0xfc) == 0xd0
+         || (inst & 0xfc) == 0xd4
+         || (inst & 0xfc) == 0xd8
+         || (inst & 0xf0) == 0xe0)
+       {
+         insn = inst;
+         h = lookup_hash (insn, 1);
+         extension = 0;
+         (h->ops->func)(insn, extension);
+         PC += 1;
+       }
+
+      /* These are two byte insns.  */
+      else if ((inst & 0xf0) == 0x80
+              || (inst & 0xf0) == 0x90
+              || (inst & 0xf0) == 0xa0
+              || (inst & 0xf0) == 0xb0
+              || (inst & 0xfc) == 0x20
+              || (inst & 0xfc) == 0x28
+              || (inst & 0xf3) == 0x43
+              || (inst & 0xf3) == 0x42
+              || (inst & 0xfc) == 0x58
+              || (inst & 0xfc) == 0x5c
+              || ((inst & 0xf0) == 0xc0
+                  && (inst & 0xff) != 0xcb
+                  && (inst & 0xff) != 0xcc
+                  && (inst & 0xff) != 0xcd)
+              || (inst & 0xff) == 0xf0
+              || (inst & 0xff) == 0xf1
+              || (inst & 0xff) == 0xf2
+              || (inst & 0xff) == 0xf3
+              || (inst & 0xff) == 0xf4
+              || (inst & 0xff) == 0xf5
+              || (inst & 0xff) == 0xf6)
+       {
+         insn = load_mem_big (PC, 2);
+         h = lookup_hash (insn, 2);
+         extension = 0;
+         (h->ops->func)(insn, extension);
+         PC += 2;
+       }
+
+      /* These are three byte insns.  */
+      else if ((inst & 0xff) == 0xf8
+              || (inst & 0xff) == 0xcc 
+              || (inst & 0xff) == 0xf9
+              || (inst & 0xf3) == 0x01
+              || (inst & 0xf3) == 0x02
+              || (inst & 0xf3) == 0x03
+              || (inst & 0xfc) == 0x24
+              || (inst & 0xfc) == 0x2c
+              || (inst & 0xfc) == 0x30
+              || (inst & 0xfc) == 0x34
+              || (inst & 0xfc) == 0x38
+              || (inst & 0xff) == 0xde
+              || (inst & 0xff) == 0xdf
+              || (inst & 0xff) == 0xcc)
+       {
+         insn = load_mem_big (PC, 3);
+         h = lookup_hash (insn, 3);
+         extension = 0;
+         (h->ops->func)(insn, extension);
+         PC += 3;
+       }
+
+      /* These are four byte insns.  */
+      else if ((inst & 0xff) == 0xfa
+              || (inst & 0xff) == 0xfb)
+       {
+         insn = load_mem_big (PC, 4);
+         h = lookup_hash (insn, 4);
+         extension = 0;
+         (h->ops->func)();
+         PC += 4;
+       }
+
+      /* These are five byte insns.  */
+      else if ((inst & 0xff) == 0xcd
+              || (inst & 0xff) == 0xdc)
+       {
+         insn = load_mem_big (PC, 4);
+         h = lookup_hash (insn, 5);
+         extension = load_mem_big (PC + 4, 1);
+         (h->ops->func)(insn, extension);
+         PC += 5;
+       }
+
+      /* These are six byte insns.  */
+      else if ((inst & 0xff) == 0xfd
+              || (inst & 0xff) == 0xfc)
+       {
+         insn = load_mem_big (PC, 4);
+         h = lookup_hash (insn, 6);
+         extension = load_mem_big (PC + 4, 2);
+         (h->ops->func)(insn, extension);
+         PC += 6;
+       }
+
+      /* Else its a seven byte insns (in theory).  */
+      else
        {
+         insn = load_mem_big (PC, 4);
+         h = lookup_hash (insn, 7);
+         extension = load_mem_big (PC + 4, 3);
+         (h->ops->func)(insn, extension);
+         PC += 7;
        }
     }
   while (!State.exception);
index 8c6a216..abeaa43 100644 (file)
@@ -59,7 +59,7 @@ struct simops
 
 struct _state
 {
-  reg_t regs[10];              /* registers, d0-d3, a0-a3, sp, mdr */
+  reg_t regs[12];              /* registers, d0-d3, a0-a3, sp, mdr, lar, lir */
   reg_t sregs[8];              /* system registers, including psw */
   reg_t pc;
   uint8 *mem;                  /* main memory */
@@ -68,7 +68,6 @@ struct _state
 
 extern uint32 OP[4];
 extern struct simops Simops[];
-extern unsigned long insn, extension;
 
 #define PC     (State.pc)
 
@@ -82,6 +81,8 @@ extern unsigned long insn, extension;
 #define REG_A0 4
 #define REG_SP 8
 #define REG_MDR 9
+#define REG_LAR 10
+#define REG_LIR 11
 
 #define SEXT3(x)       ((((x)&0x7)^(~0x3))+0x4)        
 
index c944e8a..b2fca3e 100644 (file)
@@ -63,86 +63,100 @@ trace_output (result)
 
 \f
 /* mov imm8, dn */
-void OP_8000 ()
+void OP_8000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)] = SEXT8 (insn & 0xff);
 }
 
 /* mov dm, dn */
-void OP_80 ()
+void OP_80 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov dm, an */
-void OP_F1E0 ()
+void OP_F1E0 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + (insn & 0x3)] = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov am, dn */
-void OP_F1D0 ()
+void OP_F1D0 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov imm8, an */
-void OP_9000 ()
+void OP_9000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x300) >> 8)] = insn & 0xff;
 }
 
 /* mov am, an */
-void OP_90 ()
+void OP_90 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + (insn & 0x3)] = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov sp, an */
-void OP_3C ()
+void OP_3C (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + (insn & 0x3)] = State.regs[REG_SP];
 }
 
 /* mov am, sp */
-void OP_F2F0 ()
+void OP_F2F0 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_SP] = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov psw, dn */
-void OP_F2E4 ()
+void OP_F2E4 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] = PSW;
 }
 
 /* mov dm, psw */
-void OP_F2F3 ()
+void OP_F2F3 (insn, extension)
+     unsigned long insn, extension;
 {
   PSW = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov mdr, dn */
-void OP_F2E0 ()
+void OP_F2E0 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] = State.regs[REG_MDR];
 }
 
 /* mov dm, mdr */
-void OP_F2F2 ()
+void OP_F2F2 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_MDR] = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
 }
 
 /* mov (am), dn */
-void OP_70 ()
+void OP_70 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc) >> 2)]
     = load_mem (State.regs[REG_A0 + (insn & 0x3)], 4);
 }
 
 /* mov (d8,am), dn */
-void OP_F80000 ()
+void OP_F80000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc00) >> 10)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
@@ -150,7 +164,8 @@ void OP_F80000 ()
 }
 
 /* mov (d16,am), dn */
-void OP_FA000000 ()
+void OP_FA000000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -158,7 +173,8 @@ void OP_FA000000 ()
 }
 
 /* mov (d32,am), dn */
-void OP_FC000000 ()
+void OP_FC000000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -166,28 +182,32 @@ void OP_FC000000 ()
 }
 
 /* mov (d8,sp), dn */
-void OP_5800 ()
+void OP_5800 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)]
     = load_mem (State.regs[REG_SP] + (insn & 0xff), 4);
 }
 
 /* mov (d16,sp), dn */
-void OP_FAB40000 ()
+void OP_FAB40000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem (State.regs[REG_SP] + (insn & 0xffff), 4);
 }
 
 /* mov (d32,sp), dn */
-void OP_FCB40000 ()
+void OP_FCB40000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4);
 }
 
 /* mov (di,am), dn */
-void OP_F300 ()
+void OP_F300 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)]
     = load_mem ((State.regs[REG_A0 + (insn & 0x3)]
@@ -195,27 +215,31 @@ void OP_F300 ()
 }
 
 /* mov (abs16), dn */
-void OP_300000 ()
+void OP_300000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)] = load_mem ((insn & 0xffff), 4);
 }
 
 /* mov (abs32), dn */
-void OP_FCA40000 ()
+void OP_FCA40000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem ((((insn & 0xffff) << 16) + extension), 4);
 }
 
 /* mov (am), an */
-void OP_F000 ()
+void OP_F000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0xc) >> 2)]
     = load_mem (State.regs[REG_A0 + (insn & 0x3)], 4);
 }
 
 /* mov (d8,am), an */
-void OP_F82000 ()
+void OP_F82000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0xc00) >> 10)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
@@ -223,7 +247,8 @@ void OP_F82000 ()
 }
 
 /* mov (d16,am), an */
-void OP_FA200000 ()
+void OP_FA200000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -231,7 +256,8 @@ void OP_FA200000 ()
 }
 
 /* mov (d32,am), an */
-void OP_FC200000 ()
+void OP_FC200000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -239,28 +265,32 @@ void OP_FC200000 ()
 }
 
 /* mov (d8,sp), an */
-void OP_5C00 ()
+void OP_5C00 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x300) >> 8)]
     = load_mem (State.regs[REG_SP] + (insn & 0xff), 4);
 }
 
 /* mov (d16,sp), an */
-void OP_FAB00000 ()
+void OP_FAB00000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
     = load_mem (State.regs[REG_SP] + (insn & 0xffff), 4);
 }
 
 /* mov (d32,sp), an */
-void OP_FCB00000 ()
+void OP_FCB00000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
     = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4);
 }
 
 /* mov (di,am), an */
-void OP_F380 ()
+void OP_F380 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x300) >> 8)]
     = load_mem ((State.regs[REG_A0 + (insn & 0x3)]
@@ -268,20 +298,23 @@ void OP_F380 ()
 }
 
 /* mov (abs16), an */
-void OP_FAA00000 ()
+void OP_FAA00000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x30000) >> 16)] = load_mem ((insn & 0xffff), 4);
 }
 
 /* mov (abs32), an */
-void OP_FCA00000 ()
+void OP_FCA00000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
     = load_mem ((((insn & 0xffff) << 16) + extension), 4);
 }
 
 /* mov (d8,am), sp */
-void OP_F8F000 ()
+void OP_F8F000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_SP]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
@@ -289,14 +322,16 @@ void OP_F8F000 ()
 }
 
 /* mov dm, (an) */
-void OP_60 ()
+void OP_60 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_A0 + (insn & 0x3)], 4,
             State.regs[REG_D0 + ((insn & 0xc) >> 2)]);
 }
 
 /* mov dm, (d8,an) */
-void OP_F81000 ()
+void OP_F81000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
              + SEXT8 (insn & 0xff)), 4,
@@ -304,7 +339,8 @@ void OP_F81000 ()
 }
 
 /* mov dm (d16,an) */
-void OP_FA100000 ()
+void OP_FA100000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + SEXT16 (insn & 0xffff)), 4,
@@ -312,7 +348,8 @@ void OP_FA100000 ()
 }
 
 /* mov dm (d32,an) */
-void OP_FC100000 ()
+void OP_FC100000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + ((insn & 0xffff) << 16) + extension), 4,
@@ -320,28 +357,32 @@ void OP_FC100000 ()
 }
 
 /* mov dm, (d8,sp) */
-void OP_4200 ()
+void OP_4200 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xff), 4,
             State.regs[REG_D0 + ((insn & 0xc00) >> 10)]);
 }
 
 /* mov dm, (d16,sp) */
-void OP_FA910000 ()
+void OP_FA910000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xffff), 4,
             State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov dm, (d32,sp) */
-void OP_FC910000 ()
+void OP_FC910000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4,
             State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov dm, (di,an) */
-void OP_F340 ()
+void OP_F340 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + (insn & 0x3)]
              + State.regs[REG_D0 + ((insn & 0xc) >> 2)]), 4,
@@ -349,26 +390,30 @@ void OP_F340 ()
 }
 
 /* mov dm, (abs16) */
-void OP_10000 ()
+void OP_10000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((insn & 0xffff), 4, State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov dm, (abs32) */
-void OP_FC810000 ()
+void OP_FC810000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((((insn & 0xffff) << 16) + extension), 4, State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov am, (an) */
-void OP_F010 ()
+void OP_F010 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_A0 + (insn & 0x3)], 4,
             State.regs[REG_A0 + ((insn & 0xc) >> 2)]);
 }
 
 /* mov am, (d8,an) */
-void OP_F83000 ()
+void OP_F83000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
              + SEXT8 (insn & 0xff)), 4,
@@ -376,7 +421,8 @@ void OP_F83000 ()
 }
 
 /* mov am, (d16,an) */
-void OP_FA300000 ()
+void OP_FA300000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + SEXT16 (insn & 0xffff)), 4,
@@ -384,7 +430,8 @@ void OP_FA300000 ()
 }
 
 /* mov am, (d32,an) */
-void OP_FC300000 ()
+void OP_FC300000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + ((insn & 0xffff) << 16) + extension), 4,
@@ -392,28 +439,32 @@ void OP_FC300000 ()
 }
 
 /* mov am, (d8,sp) */
-void OP_4300 ()
+void OP_4300 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xff), 4,
             State.regs[REG_A0 + ((insn & 0xc00) >> 10)]);
 }
 
 /* mov am, (d16,sp) */
-void OP_FA900000 ()
+void OP_FA900000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xffff), 4,
             State.regs[REG_A0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov am, (d32,sp) */
-void OP_FC900000 ()
+void OP_FC900000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 4,
             State.regs[REG_A0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov am, (di,an) */
-void OP_F3C0 ()
+void OP_F3C0 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + (insn & 0x3)]
              + State.regs[REG_D0 + ((insn & 0xc) >> 2)]), 4,
@@ -421,26 +472,30 @@ void OP_F3C0 ()
 }
 
 /* mov am, (abs16) */
-void OP_FA800000 ()
+void OP_FA800000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((insn & 0xffff), 4, State.regs[REG_A0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov am, (abs32) */
-void OP_FC800000 ()
+void OP_FC800000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((((insn & 0xffff) << 16) + extension), 4, State.regs[REG_A0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* mov sp, (d8,an) */
-void OP_F8F400 ()
+void OP_F8F400 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_A0 + ((insn & 0x300) >> 8)] + SEXT8 (insn & 0xff),
             4, State.regs[REG_SP]);
 }
 
 /* mov imm16, dn */
-void OP_2C0000 ()
+void OP_2C0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long value;
 
@@ -449,7 +504,8 @@ void OP_2C0000 ()
 }
 
 /* mov imm32,dn */
-void OP_FCCC0000 ()
+void OP_FCCC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long value;
 
@@ -458,7 +514,8 @@ void OP_FCCC0000 ()
 }
 
 /* mov imm16, an */
-void OP_240000 ()
+void OP_240000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long value;
 
@@ -467,7 +524,8 @@ void OP_240000 ()
 }
 
 /* mov imm32, an */
-void OP_FCDC0000 ()
+void OP_FCDC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long value;
 
@@ -476,14 +534,16 @@ void OP_FCDC0000 ()
 }
 
 /* movbu (am), dn */
-void OP_F040 ()
+void OP_F040 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc) >> 2)]
     = load_mem (State.regs[REG_A0 + (insn & 0x3)], 1);
 }
 
 /* movbu (d8,am), dn */
-void OP_F84000 ()
+void OP_F84000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc00) >> 10)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
@@ -491,7 +551,8 @@ void OP_F84000 ()
 }
 
 /* movbu (d16,am), dn */
-void OP_FA400000 ()
+void OP_FA400000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -499,7 +560,8 @@ void OP_FA400000 ()
 }
 
 /* movbu (d32,am), dn */
-void OP_FC400000 ()
+void OP_FC400000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -507,28 +569,32 @@ void OP_FC400000 ()
 }
 
 /* movbu (d8,sp), dn */
-void OP_F8B800 ()
+void OP_F8B800 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)]
     = load_mem ((State.regs[REG_SP] + (insn & 0xff)), 1);
 }
 
 /* movbu (d16,sp), dn */
-void OP_FAB80000 ()
+void OP_FAB80000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem ((State.regs[REG_SP] + (insn & 0xffff)), 1);
 }
 
 /* movbu (d32,sp), dn */
-void OP_FCB80000 ()
+void OP_FCB80000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 1);
 }
 
 /* movbu (di,am), dn */
-void OP_F400 ()
+void OP_F400 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)]
     = load_mem ((State.regs[REG_A0 + (insn & 0x3)]
@@ -536,27 +602,31 @@ void OP_F400 ()
 }
 
 /* movbu (abs16), dn */
-void OP_340000 ()
+void OP_340000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)] = load_mem ((insn & 0xffff), 1);
 }
 
 /* movbu (abs32), dn */
-void OP_FCA80000 ()
+void OP_FCA80000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem ((((insn & 0xffff) << 16) + extension), 1);
 }
 
 /* movbu dm, (an) */
-void OP_F050 ()
+void OP_F050 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_A0 + (insn & 0x3)], 1,
             State.regs[REG_D0 + ((insn & 0xc) >> 2)]);
 }
 
 /* movbu dm, (d8,an) */
-void OP_F85000 ()
+void OP_F85000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
              + SEXT8 (insn & 0xff)), 1,
@@ -564,7 +634,8 @@ void OP_F85000 ()
 }
 
 /* movbu dm, (d16,an) */
-void OP_FA500000 ()
+void OP_FA500000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + SEXT16 (insn & 0xffff)), 1,
@@ -572,7 +643,8 @@ void OP_FA500000 ()
 }
 
 /* movbu dm, (d32,an) */
-void OP_FC500000 ()
+void OP_FC500000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + ((insn & 0xffff) << 16) + extension), 1,
@@ -580,28 +652,32 @@ void OP_FC500000 ()
 }
 
 /* movbu dm, (d8,sp) */
-void OP_F89200 ()
+void OP_F89200 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xff), 1,
             State.regs[REG_D0 + ((insn & 0xc00) >> 10)]);
 }
 
 /* movbu dm, (d16,sp) */
-void OP_FA920000 ()
+void OP_FA920000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xffff), 2,
             State.regs[REG_D0 + ((insn & 0xc00) >> 10)]);
 }
 
 /* movbu dm (d32,sp) */
-void OP_FC920000 ()
+void OP_FC920000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 2,
             State.regs[REG_D0 + ((insn & 0xc00) >> 10)]);
 }
 
 /* movbu dm, (di,an) */
-void OP_F440 ()
+void OP_F440 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + (insn & 0x3)]
              + State.regs[REG_D0 + ((insn & 0xc) >> 2)]), 1,
@@ -609,26 +685,30 @@ void OP_F440 ()
 }
 
 /* movbu dm, (abs16) */
-void OP_20000 ()
+void OP_20000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((insn & 0xffff), 1, State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* movbu dm, (abs32) */
-void OP_FC820000 ()
+void OP_FC820000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((((insn & 0xffff) << 16) + extension), 1, State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* movhu (am), dn */
-void OP_F060 ()
+void OP_F060 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc) >> 2)]
     = load_mem (State.regs[REG_A0 + (insn & 0x3)], 2);
 }
 
 /* movhu (d8,am), dn */
-void OP_F86000 ()
+void OP_F86000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc00) >> 10)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
@@ -636,7 +716,8 @@ void OP_F86000 ()
 }
 
 /* movhu (d16,am), dn */
-void OP_FA600000 ()
+void OP_FA600000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -644,7 +725,8 @@ void OP_FA600000 ()
 }
 
 /* movhu (d32,am), dn */
-void OP_FC600000 ()
+void OP_FC600000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]
     = load_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
@@ -652,28 +734,32 @@ void OP_FC600000 ()
 }
 
 /* movhu (d8,sp) dn */
-void OP_F8BC00 ()
+void OP_F8BC00 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)]
     = load_mem ((State.regs[REG_SP] + (insn & 0xff)), 2);
 }
 
 /* movhu (d16,sp), dn */
-void OP_FABC0000 ()
+void OP_FABC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem ((State.regs[REG_SP] + (insn & 0xffff)), 2);
 }
 
 /* movhu (d32,sp), dn */
-void OP_FCBC0000 ()
+void OP_FCBC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 2);
 }
 
 /* movhu (di,am), dn */
-void OP_F480 ()
+void OP_F480 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x300) >> 8)]
     = load_mem ((State.regs[REG_A0 + (insn & 0x3)]
@@ -681,27 +767,31 @@ void OP_F480 ()
 }
 
 /* movhu (abs16), dn */
-void OP_380000 ()
+void OP_380000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)] = load_mem ((insn & 0xffff), 2);
 }
 
 /* movhu (abs32), dn */
-void OP_FCAC0000 ()
+void OP_FCAC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0x30000) >> 16)]
     = load_mem ((((insn & 0xffff) << 16) + extension), 2);
 }
 
 /* movhu dm, (an) */
-void OP_F070 ()
+void OP_F070 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_A0 + (insn & 0x3)], 2,
             State.regs[REG_D0 + ((insn & 0xc) >> 2)]);
 }
 
 /* movhu dm, (d8,an) */
-void OP_F87000 ()
+void OP_F87000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x300) >> 8)]
              + SEXT8 (insn & 0xff)), 2,
@@ -709,7 +799,8 @@ void OP_F87000 ()
 }
 
 /* movhu dm, (d16,an) */
-void OP_FA700000 ()
+void OP_FA700000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + SEXT16 (insn & 0xffff)), 2,
@@ -717,7 +808,8 @@ void OP_FA700000 ()
 }
 
 /* movhu dm, (d32,an) */
-void OP_FC700000 ()
+void OP_FC700000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + ((insn & 0x30000) >> 16)]
              + ((insn & 0xffff) << 16) + extension), 2,
@@ -725,28 +817,32 @@ void OP_FC700000 ()
 }
 
 /* movhu dm,(d8,sp) */
-void OP_F89300 ()
+void OP_F89300 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xff), 2,
             State.regs[REG_D0 + ((insn & 0xc00) >> 10)]);
 }
 
 /* movhu dm,(d16,sp) */
-void OP_FA930000 ()
+void OP_FA930000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (insn & 0xffff), 2,
             State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* movhu dm,(d32,sp) */
-void OP_FC930000 ()
+void OP_FC930000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem (State.regs[REG_SP] + (((insn & 0xffff) << 16) + extension), 2,
             State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* movhu dm, (di,an) */
-void OP_F4C0 ()
+void OP_F4C0 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((State.regs[REG_A0 + (insn & 0x3)]
              + State.regs[REG_D0 + ((insn & 0xc) >> 2)]), 2,
@@ -754,19 +850,22 @@ void OP_F4C0 ()
 }
 
 /* movhu dm, (abs16) */
-void OP_30000 ()
+void OP_30000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((insn & 0xffff), 2, State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* movhu dm, (abs32) */
-void OP_FC830000 ()
+void OP_FC830000 (insn, extension)
+     unsigned long insn, extension;
 {
   store_mem ((((insn & 0xffff) << 16) + extension), 2, State.regs[REG_D0 + ((insn & 0xc0000) >> 18)]);
 }
 
 /* ext dn */
-void OP_F2D0 ()
+void OP_F2D0 (insn, extension)
+     unsigned long insn, extension;
 {
   if (State.regs[REG_D0 + (insn & 0x3)] & 0x80000000)
     State.regs[REG_MDR] = -1;
@@ -775,32 +874,37 @@ void OP_F2D0 ()
 }
 
 /* extb dn */
-void OP_10 ()
+void OP_10 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] = SEXT8 (State.regs[REG_D0 + (insn & 0x3)]);
 }
 
 /* extbu dn */
-void OP_14 ()
+void OP_14 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] &= 0xff;
 }
 
 /* exth dn */
-void OP_18 ()
+void OP_18 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)]
     = SEXT16 (State.regs[REG_D0 + (insn & 0x3)]);
 }
 
 /* exthu dn */
-void OP_1C ()
+void OP_1C (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + (insn & 0x3)] &= 0xffff;
 }
 
 /* movm (sp), reg_list */
-void OP_CE00 ()
+void OP_CE00 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long sp = State.regs[REG_SP];
   unsigned long mask;
@@ -855,7 +959,8 @@ void OP_CE00 ()
 }
 
 /* movm reg_list, (sp) */
-void OP_CF00 ()
+void OP_CF00 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long sp = State.regs[REG_SP];
   unsigned long mask;
@@ -910,7 +1015,8 @@ void OP_CF00 ()
 }
 
 /* clr dn */
-void OP_0 ()
+void OP_0 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_D0 + ((insn & 0xc) >> 2)] = 0;
 
@@ -919,7 +1025,8 @@ void OP_0 ()
 }
 
 /* add dm,dn */
-void OP_E0 ()
+void OP_E0 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -941,7 +1048,8 @@ void OP_E0 ()
 }
 
 /* add dm, an */
-void OP_F160 ()
+void OP_F160 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -963,7 +1071,8 @@ void OP_F160 ()
 }
 
 /* add am, dn */
-void OP_F150 ()
+void OP_F150 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -985,7 +1094,8 @@ void OP_F150 ()
 }
 
 /* add am,an */
-void OP_F170 ()
+void OP_F170 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1007,7 +1117,8 @@ void OP_F170 ()
 }
 
 /* add imm8, dn */
-void OP_2800 ()
+void OP_2800 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1029,7 +1140,8 @@ void OP_2800 ()
 }
 
 /* add imm16, dn */
-void OP_FAC00000 ()
+void OP_FAC00000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1051,7 +1163,8 @@ void OP_FAC00000 ()
 }
 
 /* add imm32,dn */
-void OP_FCC00000 ()
+void OP_FCC00000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1073,7 +1186,8 @@ void OP_FCC00000 ()
 }
 
 /* add imm8, an */
-void OP_2000 ()
+void OP_2000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1095,7 +1209,8 @@ void OP_2000 ()
 }
 
 /* add imm16, an */
-void OP_FAD00000 ()
+void OP_FAD00000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1117,7 +1232,8 @@ void OP_FAD00000 ()
 }
 
 /* add imm32, an */
-void OP_FCD00000 ()
+void OP_FCD00000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1139,7 +1255,8 @@ void OP_FCD00000 ()
 }
 
 /* add imm8, sp */
-void OP_F8FE00 ()
+void OP_F8FE00 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1151,7 +1268,8 @@ void OP_F8FE00 ()
 }
 
 /* add imm16,sp */
-void OP_FAFE0000 ()
+void OP_FAFE0000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1163,7 +1281,8 @@ void OP_FAFE0000 ()
 }
 
 /* add imm32, sp */
-void OP_FCFE0000 ()
+void OP_FCFE0000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1175,7 +1294,8 @@ void OP_FCFE0000 ()
 }
 
 /* addc dm,dn */
-void OP_F140 ()
+void OP_F140 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1197,7 +1317,8 @@ void OP_F140 ()
 }
 
 /* sub dm, dn */
-void OP_F100 ()
+void OP_F100 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1219,7 +1340,8 @@ void OP_F100 ()
 }
 
 /* sub dm, an */
-void OP_F120 ()
+void OP_F120 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1241,7 +1363,8 @@ void OP_F120 ()
 }
 
 /* sub am, dn */
-void OP_F110 ()
+void OP_F110 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1263,7 +1386,8 @@ void OP_F110 ()
 }
 
 /* sub am, an */
-void OP_F130 ()
+void OP_F130 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1285,7 +1409,8 @@ void OP_F130 ()
 }
 
 /* sub imm32, dn */
-void OP_FCC40000 ()
+void OP_FCC40000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1307,7 +1432,8 @@ void OP_FCC40000 ()
 }
 
 /* sub imm32, an */
-void OP_FCD40000 ()
+void OP_FCD40000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1329,7 +1455,8 @@ void OP_FCD40000 ()
 }
 
 /* subc dm, dn */
-void OP_F180 ()
+void OP_F180 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1351,7 +1478,8 @@ void OP_F180 ()
 }
 
 /* mul dm, dn */
-void OP_F240 ()
+void OP_F240 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long long temp;
   int n, z;
@@ -1367,7 +1495,8 @@ void OP_F240 ()
 }
 
 /* mulu dm, dn */
-void OP_F250 ()
+void OP_F250 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long long temp;
   int n, z;
@@ -1383,7 +1512,8 @@ void OP_F250 ()
 }
 
 /* div dm, dn */
-void OP_F260 ()
+void OP_F260 (insn, extension)
+     unsigned long insn, extension;
 {
   long long temp;
   int n, z;
@@ -1402,7 +1532,8 @@ void OP_F260 ()
 }
 
 /* divu dm, dn */
-void OP_F270 ()
+void OP_F270 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long long temp;
   int n, z;
@@ -1421,7 +1552,8 @@ void OP_F270 ()
 }
 
 /* inc dn */
-void OP_40 ()
+void OP_40 (insn, extension)
+     unsigned long insn, extension;
 {
   int z,n,c,v;
   unsigned int value, imm, reg1;
@@ -1443,19 +1575,22 @@ void OP_40 ()
 }
 
 /* inc an */
-void OP_41 ()
+void OP_41 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + ((insn & 0xc) >> 2)] += 1;
 }
 
 /* inc4 an */
-void OP_50 ()
+void OP_50 (insn, extension)
+     unsigned long insn, extension;
 {
   State.regs[REG_A0 + (insn & 0x3)] += 4;
 }
 
 /* cmp imm8, dn */
-void OP_A000 ()
+void OP_A000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1476,7 +1611,8 @@ void OP_A000 ()
 }
 
 /* cmp dm, dn */
-void OP_A0 ()
+void OP_A0 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1497,7 +1633,8 @@ void OP_A0 ()
 }
 
 /* cmp dm, an */
-void OP_F1A0 ()
+void OP_F1A0 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1518,7 +1655,8 @@ void OP_F1A0 ()
 }
 
 /* cmp am, dn */
-void OP_F190 ()
+void OP_F190 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1539,7 +1677,8 @@ void OP_F190 ()
 }
 
 /* cmp imm8, an */
-void OP_B000 ()
+void OP_B000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1560,7 +1699,8 @@ void OP_B000 ()
 }
 
 /* cmp am, an */
-void OP_B0 ()
+void OP_B0 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, reg2, value;
@@ -1581,7 +1721,8 @@ void OP_B0 ()
 }
 
 /* cmp imm16, dn */
-void OP_FAC80000 ()
+void OP_FAC80000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1602,7 +1743,8 @@ void OP_FAC80000 ()
 }
 
 /* cmp imm32, dn */
-void OP_FCC80000 ()
+void OP_FCC80000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1623,7 +1765,8 @@ void OP_FCC80000 ()
 }
 
 /* cmp imm16, an */
-void OP_FAD80000 ()
+void OP_FAD80000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1644,7 +1787,8 @@ void OP_FAD80000 ()
 }
 
 /* cmp imm32, an */
-void OP_FCD80000 ()
+void OP_FCD80000 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, c, n, v;
   unsigned long reg1, imm, value;
@@ -1665,7 +1809,8 @@ void OP_FCD80000 ()
 }
 
 /* and dm, dn */
-void OP_F200 ()
+void OP_F200 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1677,7 +1822,8 @@ void OP_F200 ()
 }
 
 /* and imm8, dn */
-void OP_F8E000 ()
+void OP_F8E000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1689,7 +1835,8 @@ void OP_F8E000 ()
 }
 
 /* and imm16, dn */
-void OP_FAE00000 ()
+void OP_FAE00000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1701,7 +1848,8 @@ void OP_FAE00000 ()
 }
 
 /* and imm32, dn */
-void OP_FCE00000 ()
+void OP_FCE00000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1714,13 +1862,15 @@ void OP_FCE00000 ()
 }
 
 /* and imm16, psw */
-void OP_FAFC0000 ()
+void OP_FAFC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   PSW &= (insn & 0xffff);
 }
 
 /* or dm, dn*/
-void OP_F210 ()
+void OP_F210 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1732,7 +1882,8 @@ void OP_F210 ()
 }
 
 /* or imm8, dn */
-void OP_F8E400 ()
+void OP_F8E400 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1744,7 +1895,8 @@ void OP_F8E400 ()
 }
 
 /* or imm16, dn*/
-void OP_FAE40000 ()
+void OP_FAE40000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1756,7 +1908,8 @@ void OP_FAE40000 ()
 }
 
 /* or imm32, dn */
-void OP_FCE40000 ()
+void OP_FCE40000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1769,13 +1922,15 @@ void OP_FCE40000 ()
 }
 
 /* or imm16,psw */
-void OP_FAFD0000 ()
+void OP_FAFD0000 (insn, extension)
+     unsigned long insn, extension;
 {
   PSW |= (insn & 0xffff);
 }
 
 /* xor dm, dn*/
-void OP_F220 ()
+void OP_F220 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1787,7 +1942,8 @@ void OP_F220 ()
 }
 
 /* xor imm16, dn */
-void OP_FAE80000 ()
+void OP_FAE80000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1799,7 +1955,8 @@ void OP_FAE80000 ()
 }
 
 /* xor imm32, dn */
-void OP_FCE80000 ()
+void OP_FCE80000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1812,7 +1969,8 @@ void OP_FCE80000 ()
 }
 
 /* not dn */
-void OP_F230 ()
+void OP_F230 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -1824,7 +1982,8 @@ void OP_F230 ()
 }
 
 /* btst imm8, dn */
-void OP_F8EC00 ()
+void OP_F8EC00 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z, n;
@@ -1838,7 +1997,8 @@ void OP_F8EC00 ()
 }
 
 /* btst imm16, dn */
-void OP_FAEC0000 ()
+void OP_FAEC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z, n;
@@ -1852,7 +2012,8 @@ void OP_FAEC0000 ()
 }
 
 /* btst imm32, dn */
-void OP_FCEC0000 ()
+void OP_FCEC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z, n;
@@ -1866,7 +2027,8 @@ void OP_FCEC0000 ()
 }
 
 /* btst imm8,(abs32) */
-void OP_FE020000 ()
+void OP_FE020000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int n, z;
@@ -1880,7 +2042,8 @@ void OP_FE020000 ()
 }
 
 /* btst imm8,(d8,an) */
-void OP_FAF80000 ()
+void OP_FAF80000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int n, z;
@@ -1895,7 +2058,8 @@ void OP_FAF80000 ()
 }
 
 /* bset dm, (an) */
-void OP_F080 ()
+void OP_F080 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z;
@@ -1909,7 +2073,8 @@ void OP_F080 ()
 }
 
 /* bset imm8, (abs32) */
-void OP_FE000000 ()
+void OP_FE000000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z;
@@ -1923,7 +2088,8 @@ void OP_FE000000 ()
 }
 
 /* bset imm8,(d8,an) */
-void OP_FAF00000 ()
+void OP_FAF00000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z;
@@ -1938,7 +2104,8 @@ void OP_FAF00000 ()
 }
 
 /* bclr dm, (an) */
-void OP_F090 ()
+void OP_F090 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z;
@@ -1952,7 +2119,8 @@ void OP_F090 ()
 }
 
 /* bclr imm8, (abs32) */
-void OP_FE010000 ()
+void OP_FE010000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z;
@@ -1966,7 +2134,8 @@ void OP_FE010000 ()
 }
 
 /* bclr imm8,(d8,an) */
-void OP_FAF40000 ()
+void OP_FAF40000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long temp;
   int z;
@@ -1981,7 +2150,8 @@ void OP_FAF40000 ()
 }
 
 /* asr dm, dn */
-void OP_F2B0 ()
+void OP_F2B0 (insn, extension)
+     unsigned long insn, extension;
 {
   long temp;
   int z, n, c;
@@ -1997,7 +2167,8 @@ void OP_F2B0 ()
 }
 
 /* asr imm8, dn */
-void OP_F8C800 ()
+void OP_F8C800 (insn, extension)
+     unsigned long insn, extension;
 {
   long temp;
   int z, n, c;
@@ -2013,7 +2184,8 @@ void OP_F8C800 ()
 }
 
 /* lsr dm, dn */
-void OP_F2A0 ()
+void OP_F2A0 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, n, c;
 
@@ -2027,7 +2199,8 @@ void OP_F2A0 ()
 }
 
 /* lsr dm, dn */
-void OP_F8C400 ()
+void OP_F8C400 (insn, extension)
+     unsigned long insn, extension;
 {
   int z, n, c;
 
@@ -2040,7 +2213,8 @@ void OP_F8C400 ()
 }
 
 /* asl dm, dn */
-void OP_F290 ()
+void OP_F290 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -2053,7 +2227,8 @@ void OP_F290 ()
 }
 
 /* asl imm8, dn */
-void OP_F8C000 ()
+void OP_F8C000 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -2065,7 +2240,8 @@ void OP_F8C000 ()
 }
 
 /* asl2 dn */
-void OP_54 ()
+void OP_54 (insn, extension)
+     unsigned long insn, extension;
 {
   int n, z;
 
@@ -2077,7 +2253,8 @@ void OP_54 ()
 }
 
 /* ror dn */
-void OP_F284 ()
+void OP_F284 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long value;
   int c,n,z;
@@ -2096,7 +2273,8 @@ void OP_F284 ()
 }
 
 /* rol dn */
-void OP_F280 ()
+void OP_F280 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned long value;
   int c,n,z;
@@ -2115,7 +2293,8 @@ void OP_F280 ()
 }
 
 /* beq label:8 */
-void OP_C800 ()
+void OP_C800 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2124,7 +2303,8 @@ void OP_C800 ()
 }
 
 /* bne label:8 */
-void OP_C900 ()
+void OP_C900 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2133,7 +2313,8 @@ void OP_C900 ()
 }
 
 /* bgt label:8 */
-void OP_C100 ()
+void OP_C100 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2143,7 +2324,8 @@ void OP_C100 ()
 }
 
 /* bge label:8 */
-void OP_C200 ()
+void OP_C200 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2152,7 +2334,8 @@ void OP_C200 ()
 }
 
 /* ble label:8 */
-void OP_C300 ()
+void OP_C300 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2162,7 +2345,8 @@ void OP_C300 ()
 }
 
 /* blt label:8 */
-void OP_C000 ()
+void OP_C000 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2171,7 +2355,8 @@ void OP_C000 ()
 }
 
 /* bhi label:8 */
-void OP_C500 ()
+void OP_C500 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2180,7 +2365,8 @@ void OP_C500 ()
 }
 
 /* bcc label:8 */
-void OP_C600 ()
+void OP_C600 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2189,7 +2375,8 @@ void OP_C600 ()
 }
 
 /* bls label:8 */
-void OP_C700 ()
+void OP_C700 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2198,7 +2385,8 @@ void OP_C700 ()
 }
 
 /* bcs label:8 */
-void OP_C400 ()
+void OP_C400 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2207,7 +2395,8 @@ void OP_C400 ()
 }
 
 /* bvc label:8 */
-void OP_F8E800 ()
+void OP_F8E800 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 3 after we return, so
      we subtract two here to make things right.  */
@@ -2216,7 +2405,8 @@ void OP_F8E800 ()
 }
 
 /* bvs label:8 */
-void OP_F8E900 ()
+void OP_F8E900 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 3 after we return, so
      we subtract two here to make things right.  */
@@ -2225,7 +2415,8 @@ void OP_F8E900 ()
 }
 
 /* bnc label:8 */
-void OP_F8EA00 ()
+void OP_F8EA00 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 3 after we return, so
      we subtract two here to make things right.  */
@@ -2234,7 +2425,8 @@ void OP_F8EA00 ()
 }
 
 /* bns label:8 */
-void OP_F8EB00 ()
+void OP_F8EB00 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 3 after we return, so
      we subtract two here to make things right.  */
@@ -2243,7 +2435,8 @@ void OP_F8EB00 ()
 }
 
 /* bra label:8 */
-void OP_CA00 ()
+void OP_CA00 (insn, extension)
+     unsigned long insn, extension;
 {
   /* The dispatching code will add 2 after we return, so
      we subtract two here to make things right.  */
@@ -2251,97 +2444,113 @@ void OP_CA00 ()
 }
 
 /* leq */
-void OP_D8 ()
+void OP_D8 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lne */
-void OP_D9 ()
+void OP_D9 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lgt */
-void OP_D1 ()
+void OP_D1 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lge */
-void OP_D2 ()
+void OP_D2 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lle */
-void OP_D3 ()
+void OP_D3 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* llt */
-void OP_D0 ()
+void OP_D0 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lhi */
-void OP_D5 ()
+void OP_D5 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lcc */
-void OP_D6 ()
+void OP_D6 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lls */
-void OP_D7 ()
+void OP_D7 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lcs */
-void OP_D4 ()
+void OP_D4 (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* lra */
-void OP_DA ()
+void OP_DA (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* setlb */
-void OP_DB ()
+void OP_DB (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* jmp (an) */
-void OP_F0F4 ()
+void OP_F0F4 (insn, extension)
+     unsigned long insn, extension;
 {
   State.pc = State.regs[REG_A0 + (insn & 0x3)] - 2;
 }
 
 /* jmp label:16 */
-void OP_CC0000 ()
+void OP_CC0000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.pc += SEXT16 (insn & 0xffff) - 3;
 }
 
 /* jmp label:32 */
-void OP_DC000000 ()
+void OP_DC000000 (insn, extension)
+     unsigned long insn, extension;
 {
   State.pc += (((insn & 0xffffff) << 8) | extension) - 5;
 }
 
 /* call label:16,reg_list,imm8 */
-void OP_CD000000 ()
+void OP_CD000000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int next_pc, sp, adjust;
   unsigned long mask;
@@ -2406,7 +2615,8 @@ void OP_CD000000 ()
 }
 
 /* call label:32,reg_list,imm8*/
-void OP_DD000000 ()
+void OP_DD000000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int next_pc, sp, adjust;
   unsigned long mask;
@@ -2471,7 +2681,8 @@ void OP_DD000000 ()
 }
 
 /* calls (an) */
-void OP_F0F0 ()
+void OP_F0F0 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int next_pc, sp;
 
@@ -2486,7 +2697,8 @@ void OP_F0F0 ()
 }
 
 /* calls label:16 */
-void OP_FAFF0000 ()
+void OP_FAFF0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int next_pc, sp;
 
@@ -2501,7 +2713,8 @@ void OP_FAFF0000 ()
 }
 
 /* calls label:32 */
-void OP_FCFF0000 ()
+void OP_FCFF0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int next_pc, sp;
 
@@ -2516,7 +2729,8 @@ void OP_FCFF0000 ()
 }
 
 /* ret reg_list, imm8 */
-void OP_DF0000 ()
+void OP_DF0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int sp;
   unsigned long mask;
@@ -2572,7 +2786,8 @@ void OP_DF0000 ()
 }
 
 /* retf reg_list,imm8 */
-void OP_DE0000 ()
+void OP_DE0000 (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int sp;
   unsigned long mask;
@@ -2631,7 +2846,8 @@ void OP_DE0000 ()
 }
 
 /* rets */
-void OP_F0FC ()
+void OP_F0FC (insn, extension)
+     unsigned long insn, extension;
 {
   unsigned int sp;
 
@@ -2642,13 +2858,15 @@ void OP_F0FC ()
 }
 
 /* rti */
-void OP_F0FD ()
+void OP_F0FD (insn, extension)
+     unsigned long insn, extension;
 {
   abort ();
 }
 
 /* trap */
-void OP_F0FE ()
+void OP_F0FE (insn, extension)
+     unsigned long insn, extension;
 {
   /* We use this for simulated system calls; we may need to change
      it to a reserved instruction if we conflict with uses at
@@ -2788,77 +3006,92 @@ void OP_F0FE ()
 }
 
 /* rtm */
-void OP_F0FF ()
+void OP_F0FF (insn, extension)
+     unsigned long insn, extension;
 {
  abort ();
 }
 
 /* nop */
-void OP_CB ()
+void OP_CB (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* putx */
-void OP_F500 ()
+void OP_F500 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* getx */
-void OP_F6F0 ()
+void OP_F6F0 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulq */
-void OP_F600 ()
+void OP_F600 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulq */
-void OP_F90000 ()
+void OP_F90000 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulq */
-void OP_FB000000 ()
+void OP_FB000000 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulq */
-void OP_FD000000 ()
+void OP_FD000000 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulqu */
-void OP_F610 ()
+void OP_F610 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulqu */
-void OP_F91400 ()
+void OP_F91400 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulqu */
-void OP_FB140000 ()
+void OP_FB140000 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* mulqu */
-void OP_FD140000 ()
+void OP_FD140000 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* sat16 */
-void OP_F640 ()
+void OP_F640 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* sat24 */
-void OP_F650 ()
+void OP_F650 (insn, extension)
+     unsigned long insn, extension;
 {
 }
 
 /* bsch */
-void OP_F670 ()
+void OP_F670 (insn, extension)
+     unsigned long insn, extension;
 {
 }