AOpCodeMov.cs 900 B

123456789101112131415161718192021222324252627282930313233343536
  1. using ChocolArm64.Instruction;
  2. using ChocolArm64.State;
  3. namespace ChocolArm64.Decoder
  4. {
  5. class AOpCodeMov : AOpCode
  6. {
  7. public int Rd { get; private set; }
  8. public long Imm { get; private set; }
  9. public int Pos { get; private set; }
  10. public AOpCodeMov(AInst Inst, long Position, int OpCode) : base(Inst, Position, OpCode)
  11. {
  12. int P1 = (OpCode >> 22) & 1;
  13. int SF = (OpCode >> 31) & 1;
  14. if (SF == 0 && P1 != 0)
  15. {
  16. Emitter = AInstEmit.Und;
  17. return;
  18. }
  19. Rd = (OpCode >> 0) & 0x1f;
  20. Imm = (OpCode >> 5) & 0xffff;
  21. Pos = (OpCode >> 21) & 0x3;
  22. Pos <<= 4;
  23. Imm <<= Pos;
  24. RegisterSize = (OpCode >> 31) != 0
  25. ? ARegisterSize.Int64
  26. : ARegisterSize.Int32;
  27. }
  28. }
  29. }