Как подсказывать типы при компиляции с llvm-gcc?

В некотором C-коде я определяю простой статический массив как аргумент функции, скажем:

void foo(float color[3]);

Когда я собираю это с llvm-gcc, он производит следующий вывод на ассемблере LLVM:

define void @foo(float* %n1) nounwind ssp {

Есть ли способ, которым я могу намекнуть компилятору, что я хотел бы, чтобы он генерировал код, используя массив LLVM [3 x float] или вектор <3 x float> в стеке вместо указателя?

2 ответа

void foo(float color[3]); определяется стандартом C, чтобы быть эквивалентным void foo(float *color);, Может ты хочешь void foo(float (*color)[3]), или же struct vec { float elems[3]; }; void foo(struct vec color);?

Вообще говоря, вы не можете. Это стандарт C / платформа ABI, который определяет расположение ваших типов и т. Д.

Если вы хотите такой точный контроль над ИК-излучением, вам нужно сделать это вручную (или изменить лязг и т. Д.)

Другие вопросы по тегам