Seite 1 von 1

[Clang für VS] SSE-Intrinsics funktionieren nicht

Verfasst: 26.03.2015, 14:27
von Krishty
Huhu!

Ich habe die aktuelle Version der Clang-Integration für Visual Studio von http://llvm.org/builds/. Ich wollte sie nutzen um meine SSE-Texte auf Vordermann zu bringen, aber zu meinem Entsetzen muss ich feststellen, dass wichtige Intrinsics nicht gefunden werden:

  error : use of undeclared identifier '__builtin_ia32_loadups'
  error : use of undeclared identifier '__builtin_ia32_shufps'


Mit GCC funktioniert das tadellos, und gemäß der Liste hier sollten sie ab -msse zur Verfügung stehen. Das Visual C++-Projekt ist auf SSE2 eingestellt; und das scheint auch beim Compiler anzukommen, da __builtin_ia32_cvtss2si, __builtin_ia32_storelps, und __builtin_ia32_storeups erfolgreich kompilieren.

Der einzige Hinweis, den ich im Internet finde, ist dieser fünf Jahre alte Beitrag, dass BSD nicht mit Clang kompilierbar war, und das war ein Compiler-Fehler.

Fallen GCC-/Clang-Vertrauten offensichtliche Fehler in meinem Vorgehen auf? Sind die Funktionen vielleicht deprecated und deshalb rausgeschmissen worden oder so? Alternativen? Oder einfach zurücklehnen und als will-be-fixed-in-next-version abhaken?

Gruß

Re: [Clang für VS] SSE-Intrinsics funktionieren nicht

Verfasst: 26.03.2015, 14:58
von Spiele Programmierer
Gibt es einen Grund, warum du die "Builtin" GCC Style Funktionen verwendest und nicht die Intel Funktionen aus dem <xmmintrin.h> Header?

EDIT:
Also ich habe es mal mit den Intel Funktionen getestet und funktioniert bei mir einwandfrei.
Generiert bei mir "shufps" und "movups" Befehle wie es sein soll.

Re: [Clang für VS] SSE-Intrinsics funktionieren nicht

Verfasst: 26.03.2015, 16:37
von Krishty
Ach tatsächlich; da erklärt sich das Ganze: _mm_shufps ist jetzt _mm_shuffle_ps. Clang implementiert das gegenüber GCC durch das generische __builtin_shufflevector statt eines architekturspezifischen Befehls.

Unaligned Loads werden ohne built-in durchgeführt; wenn man von irgendwo vier floats lädt, wird automatisch ein MOVUPS emittiert.

Dankeschön!