using System;
namespace ARMeilleure.Decoders
{
class OpCodeAluImm : OpCodeAlu, IOpCodeAluImm
public long Immediate { get; }
public new static OpCode Create(InstDescriptor inst, ulong address, int opCode) => new OpCodeAluImm(inst, address, opCode);
public OpCodeAluImm(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
if (DataOp == DataOp.Arithmetic)
Immediate = (opCode >> 10) & 0xfff;
int shift = (opCode >> 22) & 3;
Immediate <<= shift * 12;
}
else if (DataOp == DataOp.Logical)
var bm = DecoderHelper.DecodeBitMask(opCode, true);
if (bm.IsUndefined)
Instruction = InstDescriptor.Undefined;
return;
Immediate = bm.WMask;
else
throw new ArgumentException(nameof(opCode));