AInstEmitMove.cs 983 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using ChocolArm64.Decoder;
  2. using ChocolArm64.Translation;
  3. using System.Reflection.Emit;
  4. namespace ChocolArm64.Instruction
  5. {
  6. static partial class AInstEmit
  7. {
  8. public static void Movk(AILEmitterCtx Context)
  9. {
  10. AOpCodeMov Op = (AOpCodeMov)Context.CurrOp;
  11. Context.EmitLdintzr(Op.Rd);
  12. Context.EmitLdc_I(~(0xffffL << Op.Pos));
  13. Context.Emit(OpCodes.And);
  14. Context.EmitLdc_I(Op.Imm);
  15. Context.Emit(OpCodes.Or);
  16. Context.EmitStintzr(Op.Rd);
  17. }
  18. public static void Movn(AILEmitterCtx Context)
  19. {
  20. AOpCodeMov Op = (AOpCodeMov)Context.CurrOp;
  21. Context.EmitLdc_I(~Op.Imm);
  22. Context.EmitStintzr(Op.Rd);
  23. }
  24. public static void Movz(AILEmitterCtx Context)
  25. {
  26. AOpCodeMov Op = (AOpCodeMov)Context.CurrOp;
  27. Context.EmitLdc_I(Op.Imm);
  28. Context.EmitStintzr(Op.Rd);
  29. }
  30. }
  31. }