Как включить тип __fp16 в gcc для x86_64

Тип __fp16 плавающей запятой __fp16 является хорошо известным расширением стандарта C, используемого, в частности, для процессоров ARM. Я хотел бы запустить их версию IEEE на моем процессоре x86_64. Хотя я знаю, что они, как правило, этого не делают, мне было бы хорошо с имитировать их с "беззнаковым коротким" хранилищем (они имеют одинаковые требования к выравниванию и пространство для хранения) и (аппаратное) арифметическое вычисление.

Есть ли способ запросить это в gcc?

Я предполагаю, что округление может быть немного "неправильным", но это нормально для меня.

Если бы это работало в C++, это было бы идеально.

Ответы

Ответ 1

Я не нашел способ сделать это в gcc (по состоянию на gcc 8.2.0).

Что касается clang, в 6.0.0 следующие опции показали некоторый успех:

clang -cc1 -fnative-half-type -fallow-half-arguments-and-returns

Опция -fnative-half-type включает использование типа __fp16 (вместо того, чтобы предлагать их для плавания). Хотя опция -fallow-half-arguments-and-returns __fp16 позволяет передавать значение __fp16, нестандартный API-интерфейс следует соблюдать осторожность, чтобы не смешивать разные компиляторы.

Тем не менее, он не предоставляет математические функции, использующие типы __fp16 (он будет продвигать их в/из float или double).

Это было достаточно для моего случая использования.