OpCode32BImm.cs 699 B

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