Ссылаясь на глобальную переменную с AsmJit

Мне нужно загрузить адрес существующей глобальной переменной / внешней переменной в регистр с помощью операции lea. Возможно ли это в AsmJit? Кажется, что связанная функция ptr принимает только GpVar, который должен быть создан в AsmJit.

0

Решение

Есть несколько способов сделать это. Самый портативный и рекомендуемый способ будет использовать Мов Рег, имм:

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));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]