/// <summary>
        ///     Create an ARM Instruction Memory Operand Value.
        /// </summary>
        /// <param name="this">
        ///     A native ARM instruction memory operand value.
        /// </param>
        /// <returns>
        ///     An ARM instruction memory operand value.
        /// </returns>
        public static ArmInstructionMemoryOperandValue AsArmInstructionMemoryOperandValue(this NativeArmInstructionMemoryOperandValue @this) {
            var @object = new ArmInstructionMemoryOperandValue();
            @object.BaseRegister = (ArmRegister) @this.BaseRegister;
            @object.Displacement = @this.Displacement;
            @object.IndexRegister = (ArmRegister) @this.IndexRegister;
            @object.IndexRegisterScale = @this.IndexRegisterScale;

            return @object;
        }
        /// <summary>
        ///     Create an ARM Instruction Memory Operand Value.
        /// </summary>
        /// <param name="this">
        ///     A native ARM instruction memory operand value.
        /// </param>
        /// <returns>
        ///     An ARM instruction memory operand value.
        /// </returns>
        public static ArmInstructionMemoryOperandValue AsArmInstructionMemoryOperandValue(this NativeArmInstructionMemoryOperandValue @this)
        {
            var @object = new ArmInstructionMemoryOperandValue();

            @object.BaseRegister       = (ArmRegister)@this.BaseRegister;
            @object.Displacement       = @this.Displacement;
            @object.IndexRegister      = (ArmRegister)@this.IndexRegister;
            @object.IndexRegisterScale = @this.IndexRegisterScale;

            return(@object);
        }
Example #3
0
        private Expression EffectiveAddress(ArmInstructionMemoryOperandValue mem)
        {
            var baseReg = GetReg(mem.BaseRegister);
            var ea      = baseReg;

            if (mem.Displacement > 0)
            {
                ea = emitter.IAdd(ea, Constant.Int32(mem.Displacement));
            }
            else if (mem.Displacement < 0)
            {
                ea = emitter.ISub(ea, Constant.Int32(-mem.Displacement));
            }
            else if (mem.IndexRegister != ArmRegister.Invalid)
            {
                ea = emitter.IAdd(ea, GetReg(mem.IndexRegister));
            }
            return(ea);
        }