case try_end:
case catch_end:
case try_case:
{
YReg y = readYReg();
return new Insn.Y(opcode, y);
}
case bs_put_string:
{
ByteString bin = readBytestringRef();
return new Insn.By(opcode, bin);
}
//---------- 2-ary ----------
case allocate:
case allocate_zero:
case trim:
case apply_last:
{
int i1 = readCodeInteger();
int i2 = readCodeInteger();
return new Insn.II(opcode, i1, i2);
}
case test_heap:
{
AllocList al = readAllocList();
int i2 = readCodeInteger();
return new Insn.WI(opcode, al, i2);
}
case call:
case call_only:
{
int i1 = readCodeInteger();
Label label = readLabel();
return new Insn.IL(opcode, i1, label,
functionAtLabel(label.nr));
}
case call_ext:
case call_ext_only:
{
int i1 = readCodeInteger();
int ext_fun_ref = readCodeInteger();
return new Insn.IE(opcode, i1, extFun(ext_fun_ref));
}
case bs_save2:
case bs_restore2:
{
DestinationOperand dest = readDestination();
int i2;
if ((peekTag() & 0x7) == ATOM4_TAG) {
if (readAtom().getEAtom() != START_ATOM)
throw new IOException("integer or 'start' expected");
i2 = -1;
} else i2 = readCodeInteger();
return new Insn.DI(opcode, dest, i2, true);
}
case move:
case fmove:
case fconv:
{
SourceOperand src = readSource();
DestinationOperand dest = readDestination();
return new Insn.SD(opcode, src, dest);
}
case put_tuple:
{
int i1 = readCodeInteger();
DestinationOperand dest = readDestination();
return new Insn.ID(opcode, i1, dest);
}
case loop_rec:
{
Label label = readLabel();
DestinationOperand dest = readDestination();
return new Insn.LD(opcode, label, dest);
}
case K_try:
case K_catch:
{
YReg y = readYReg();
Label label = readLabel();
return new Insn.YL(opcode, y, label);
}
case is_integer: