В LLVM нет определенной концепции байтов, целых чисел и т. Д. Все, что он поддерживает, это целые числа с произвольной шириной в битах (iN).
1 <= N <= (2^23)-1
https://llvm.org/docs/LangRef.html#integer-type
Предположим, что в некоторых языках байт = 16 бит, интерфейс языка должен убедиться, что он генерирует i16
вместо i8
. LLVM IR предназначен для работы с множеством разных языков, что является причиной этой произвольной ширины целых битов.
Можно ли создать язык, нацеленный на LLVM и поддерживающий эту концепцию для пользовательских 16-битных FPGA-процессоров?
Да, я понимал термин «16-битный процессор FPGA» как 16-битный программный процессор. LLVM изначально поддерживает процессоры с различной битовой шириной. Насколько я понимаю, это не имеет значения, если это мягкий процессор или нет.
В LLVM IR вверху мы находим нечто, называемое макетом данных. Ниже приведен макет данных X86_64. n8:16:32:64
указывает, что процессор имеет встроенную поддержку для обработки 64, 32, 16 и 8 битов, это означает, что это 64-битный процессор с обратной совместимостью.
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
Информацию об остальной части поля можно найти здесь.
https://llvm.org/docs/LangRef.html#langref-datalayout