예제 #1
0
        public static void Adrp(ArmEmitterContext context)
        {
            OpCodeAdr op = (OpCodeAdr)context.CurrOp;

            ulong address = (op.Address & ~0xfffUL) + ((ulong)op.Immediate << 12);

            SetIntOrZR(context, op.Rd, Const(address));
        }
예제 #2
0
        public static void Adr(ArmEmitterContext context)
        {
            OpCodeAdr op = (OpCodeAdr)context.CurrOp;

            ulong address = op.Address + (ulong)op.Immediate;

            Operand addressOp = !context.HasTtc
                ? Const(address)
                : Const(address, new Symbol(SymbolType.DynFunc, context.GetOffset(address)));

            SetIntOrZR(context, op.Rd, addressOp);
        }
예제 #3
0
        public static void Adrp(ArmEmitterContext context)
        {
            OpCodeAdr op = (OpCodeAdr)context.CurrOp;

            Operand addressOp;

            if (!context.HasTtc)
            {
                ulong address = (op.Address & ~0xfffUL) + ((ulong)op.Immediate << 12);

                addressOp = Const(address);
            }
            else
            {
                addressOp = Const(op.Address & ~0xfffUL, new Symbol(SymbolType.DynFuncAdrp, context.GetOffset(op.Address)));
                addressOp = context.Add(addressOp, Const((ulong)op.Immediate << 12));
            }

            SetIntOrZR(context, op.Rd, addressOp);
        }
예제 #4
0
        public static void Adr(ArmEmitterContext context)
        {
            OpCodeAdr op = (OpCodeAdr)context.CurrOp;

            SetIntOrZR(context, op.Rd, Const(op.Address + (ulong)op.Immediate));
        }