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

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8250
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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ß
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

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

Beitrag 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.
Zuletzt geändert von Spiele Programmierer am 26.03.2015, 16:50, insgesamt 1-mal geändert.
Benutzeravatar
Krishty
Establishment
Beiträge: 8250
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten