package org.reasm.m68k.assembly.internal;
import java.io.IOException;
import javax.annotation.Nonnull;
import javax.annotation.concurrent.Immutable;
/**
* The <code>CHK</code> instruction.
*
* @author Francis Gagné
*/
@Immutable
class ChkInstruction extends TwoFixedEaInstruction {
@Nonnull
static final ChkInstruction CHK = new ChkInstruction();
private ChkInstruction() {
super(AddressingModeCategory.DATA, AddressingModeCategory.DATA_REGISTER_DIRECT);
}
@Override
void assemble(M68KAssemblyContext context, InstructionSize size, EffectiveAddress ea0, EffectiveAddress ea1) throws IOException {
final int sizeField;
switch (size) {
case BYTE:
context.addInvalidSizeAttributeErrorMessage();
//$FALL-THROUGH$
case WORD:
case DEFAULT:
default:
sizeField = 1 << 7;
break;
case LONG:
checkInstructionSet(InstructionSetCheck.MC68020_OR_LATER, context);
sizeField = 0;
break;
}
ea0.word0 |= 0b01000001_00000000 | ea1.getRegister() << 9 | sizeField;
context.appendEffectiveAddress(ea0);
}
}