Я экспериментирую с LLVM IR как альтернативой сборке для программирования микросхем AVR, но я столкнулся с камнем преткновения.
У меня есть следующий рабочий код:
target triple = "avr-atmel-none"
define void @main() {
%1 = load i8, i8* inttoptr (i8 34 to i8*)
%or = or i8 %1, 1
store i8 %or, i8* inttoptr (i8 34 to i8*)
ret void
}
Обратите внимание на inttoptr (i8 34 to i8*)
- это расположение ввода-вывода с отображением в памяти на моем чипе, с которым я буду часто взаимодействовать, поэтому я хотел бы дать ему имя, например @PORTA
. Однако я не могу найти способ инициализировать глобальную переменную как указатель на определенный адрес памяти. Это не работает:
@PORTA = constant i8* inttoptr (i8 34 to i8*)
, поскольку он инициализирует содержимое переменной-указателя @PORTA
, а не создает его, указывая на этот адрес.
Можно ли создать глобальный псевдоним для определенного адреса памяти в LLVM IR? Если нет, есть ли какой-нибудь другой ярлык, который позволил бы мне использовать псевдонимы этих имен?