OpCode32BImm.cs 693 B

123456789101112131415161718192021222324252627
  1. namespace ARMeilleure.Decoders
  2. {
  3. class OpCode32BImm : OpCode32, IOpCode32BImm
  4. {
  5. public long Immediate { get; private set; }
  6. public OpCode32BImm(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
  7. {
  8. uint pc = GetPc();
  9. // When the condition is never, the instruction is BLX to Thumb mode.
  10. if (Cond != Condition.Nv)
  11. {
  12. pc &= ~3u;
  13. }
  14. Immediate = pc + DecoderHelper.DecodeImm24_2(opCode);
  15. if (Cond == Condition.Nv)
  16. {
  17. long H = (opCode >> 23) & 2;
  18. Immediate |= H;
  19. }
  20. }
  21. }
  22. }