Мне нужно загрузить адрес существующей глобальной переменной / внешней переменной в регистр с помощью операции lea. Возможно ли это в AsmJit? Кажется, что связанная функция ptr принимает только GpVar, который должен быть создан в AsmJit.
Есть несколько способов сделать это. Самый портативный и рекомендуемый способ будет использовать Мов Рег, имм:
using namespace asmjit;
using namespace asmjit::host;
// You have to initialize these...
Compiler c;
GpVar var(c, kVarTypeIntPtr);
void* p = NULL;
c.mov(var, imm_ptr(p));
Или же ле рег, мем иметь форму абсолютного адреса [mem]. Это решение работает, как и ожидалось, только в 32-битном режиме; абсолютный размер адреса всегда усекается до 32 бит:
c.lea(var, ptr_abs(p));
Других решений пока нет …