Что такое код операции "move" в LLVM IR?
Я новичок в LLVM IR
и я пытаюсь смоделировать некоторые инструкции x86 в LLVM IR
,
Вот простой случай:
move %eax, %ebx
Однако я не нашел соответствующего mov
Опкод после просмотра материалов здесь и здесь.
Итак, мой вопрос:
Если я хочу смоделировать
mov
код операции с использованием LLVM IR? Что я должен делать?Я новичок в
LLVM IR
и, возможно, я бы потратил много времени на эту "симуляционную" работу, что должно быть лучшим справочником по LLVM IR?
Я очень ценю, если кто-нибудь может мне помочь. Спасибо!
2 ответа
Там нет эквивалента mov
инструкция. IR LLVM имеет форму SSA (статическое одиночное назначение), что означает, что каждому регистру присваивается значение только один раз. Существует неограниченное количество (виртуальных) регистров - каждая операция создает новый по мере необходимости.
Непонятно, что вы подразумеваете под симуляцией инструкций x86, но если вам это подходит, вы можете выделить память в стеке для локальной переменной для каждого регистра (используя alloca
инструкция), и используйте load
а также store
инструкции для копирования значений между ними.
Если вам нужно переместить значение одного регистра LLVM IR в другой, вы можете использовать
bitcast
инструкция:
; %a contains 64bit integer value
%a = i64 ...
; Copy / move the value of %a into %b
%b = bitcast i64 %a to i64
Подробнее см. Https://llvm.org/docs/LangRef.html#bitcast-to-instruction.