Поддерживает ли LLVM IR (байт = 16 бит)? - PullRequest
0 голосов
/ 05 марта 2019

Хотите знать, поддерживает ли LLVM байты размером 16 бит и т. Д. (А не только 8 бит)?Можно ли создать язык, нацеленный на LLVM и поддерживающий эту концепцию для пользовательских 16-битных FPGA-процессоров?

Насколько я понимаю, Clang не поддерживает это, в то время как GCC может, НО делает LLVM IR?

1 Ответ

1 голос
/ 06 марта 2019

В 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

...