| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- using ARMeilleure.Decoders;
- using ARMeilleure.IntermediateRepresentation;
- using ARMeilleure.Translation;
- using static ARMeilleure.Instructions.InstEmitHelper;
- using static ARMeilleure.IntermediateRepresentation.Operand.Factory;
- namespace ARMeilleure.Instructions
- {
- static partial class InstEmit
- {
- public static void Movk(ArmEmitterContext context)
- {
- OpCodeMov op = (OpCodeMov)context.CurrOp;
- OperandType type = op.GetOperandType();
- Operand res = GetIntOrZR(context, op.Rd);
- res = context.BitwiseAnd(res, Const(type, ~(0xffffL << op.Bit)));
- res = context.BitwiseOr(res, Const(type, op.Immediate));
- SetIntOrZR(context, op.Rd, res);
- }
- public static void Movn(ArmEmitterContext context)
- {
- OpCodeMov op = (OpCodeMov)context.CurrOp;
- SetIntOrZR(context, op.Rd, Const(op.GetOperandType(), ~op.Immediate));
- }
- public static void Movz(ArmEmitterContext context)
- {
- OpCodeMov op = (OpCodeMov)context.CurrOp;
- SetIntOrZR(context, op.Rd, Const(op.GetOperandType(), op.Immediate));
- }
- }
- }
|