это, как представляется, расширение лязг к GNU C vector extensions, где-то, как это было бы нормально:
typedef int v4si __attribute__ ((vector_size (16)));
Почтовый индекс для ext_vector_type
без указания лицевого направления/обратного отсчета the Clang docs. IDK, почему они добавили строку подчеркивания, поскольку она уже действует только в GNU C __attribute__
.
Мое лучшее предположение, что это способ сообщить компилятору, что вы заботитесь только о значении первых трех элементов 4-разрядного регистра SIMD. Таким образом, это может потенциально сделать оптимизацию, которая оставляет разные мусора в высоком элементе, чем источник.
почему компилятор не разрешает ссылки на vector_float3
Работы для меня clang3.8. Попробуйте другой компилятор.
typedef __attribute__((__ext_vector_type__(3))) float vector_float3;
int foo(vector_float3 &arg) {
vector_float3 v;
vector_float3& ref = v; // unused, but syntactically valid
return arg[0]; // return the low element of the vector, converted to an integer. GNU C vector-extensions syntax.
}
compiles to the following asm on the Godbolt compiler explorer
# targeting x86-64 SystemV ABI (so the first integer/pointer arg is in rdi)
cvttss2si eax, dword ptr [rdi]
ret
спасибо за вашу помощь! как я вижу, это не очень популярная тема –
@AndrewLavq: это ответ на ваш вопрос? Если это так, отметьте его как принятый с помощью флажка под стрелками вверх/вниз. Если нет, отредактируйте вопрос, чтобы он дал понять, что вы действительно пытаетесь спросить. –