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)); }
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); }
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); }
public static void Adr(ArmEmitterContext context) { OpCodeAdr op = (OpCodeAdr)context.CurrOp; SetIntOrZR(context, op.Rd, Const(op.Address + (ulong)op.Immediate)); }