Es scheint GNU C vector extensions ein Klirren Erweiterung zu sein, wo so etwas wie das normal wäre:
typedef int v4si __attribute__ ((vector_size (16)));
Googeln für ext_vector_type
ohne die führenden/abschließenden Unterstriche gefunden the Clang docs. IDK, warum sie eine Unterstreichungsversion hinzugefügt haben, da sie bereits nur innerhalb eines GNU C __attribute__
gültig ist.
Meine beste Vermutung ist, dass es eine Möglichkeit ist, den Compiler wissen zu lassen, dass Sie nur über den Wert der ersten 3 Elemente eines 4-Element-SIMD-Registers kümmern. So kann es möglicherweise Optimierungen tun, die andere Abfälle im hohen Element hinterlassen, als die Quelle haben würde.
warum der Compiler erlaubt keine Verweise auf vector_float3
Werke für mich mit clang3.8. Versuchen Sie einen anderen Compiler.
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
Dank für Ihre Hilfe! wie ich sehe es ist nicht wirklich beliebt Thema –
@AndrewLavq: Beantwortet das Ihre Frage? Wenn dies der Fall ist, markieren Sie es mit der Checkbox unter den Hoch/Runter-Abstimmpfeilen als akzeptiert. Wenn nicht, bitte bearbeiten Sie die Frage, um klarzustellen, was Sie wirklich fragen möchten. –