InstEmitMove.cs 987 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using ChocolArm64.Decoders;
  2. using ChocolArm64.Translation;
  3. using System.Reflection.Emit;
  4. namespace ChocolArm64.Instructions
  5. {
  6. static partial class InstEmit
  7. {
  8. public static void Movk(ILEmitterCtx context)
  9. {
  10. OpCodeMov64 op = (OpCodeMov64)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(ILEmitterCtx context)
  19. {
  20. OpCodeMov64 op = (OpCodeMov64)context.CurrOp;
  21. context.EmitLdc_I(~op.Imm);
  22. context.EmitStintzr(op.Rd);
  23. }
  24. public static void Movz(ILEmitterCtx context)
  25. {
  26. OpCodeMov64 op = (OpCodeMov64)context.CurrOp;
  27. context.EmitLdc_I(op.Imm);
  28. context.EmitStintzr(op.Rd);
  29. }
  30. }
  31. }