Ссылаясь на глобальную переменную с AsmJit
Мне нужно загрузить адрес существующей глобальной переменной / внешней переменной в регистр с помощью операции lea. Возможно ли это в AsmJit? Кажется, что связанная функция ptr принимает только GpVar, который должен быть создан в AsmJit.
1 ответ
Решение
Есть несколько способов сделать это. Самый переносимый и рекомендуемый способ - использовать mov reg, imm:
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));
Или оставьте reg, mem, имея форму абсолютного адреса [mem]. Это решение работает, как и ожидалось, только в 32-битном режиме; Абсолютный размер адреса всегда усекается до 32 бит:
c.lea(var, ptr_abs(p));