+ SEM_ARG sem_arg = &abufs[0];
+ PAREXEC *par_exec = &pbufs[0];
+ PCADDR new_pc;
+
+ /* If doing parallel execution, verify insns are in the right pipeline. */
+ if (icount == 2)
+ {
+ ; /*wip*/
+ }
+
+ TRACE_INSN_INIT (current_cpu);
+ TRACE_INSN (current_cpu, d1->opcode, sem_arg, CPU (h_pc));
+ new_pc = (*d1->semantic) (current_cpu, sem_arg, par_exec);
+ TRACE_INSN_FINI (current_cpu);
+ PROFILE_COUNT_INSN (current_cpu, CPU (h_pc), CGEN_INSN_INDEX (d1->opcode));
+
+ /* The result of the semantic fn is one of:
+ - next address, branch only
+ - NEW_PC_SKIP, sc/snc insn
+ - NEW_PC_2, 2 byte non-branch non-sc/snc insn
+ - NEW_PC_4, 4 byte non-branch insn
+ */
+
+ if (new_pc == NEW_PC_4)
+ CPU (h_pc) += 4;
+ else if (NEW_PC_BRANCH_P (new_pc))
+ CPU (h_pc) = new_pc;
+ else