Test auf Builtins / intrinsics

8

Ich habe einen Code, der gcc intrinsics verwendet. Ich möchte Code für den Fall, dass der intrinsische fehlt, einfügen. Wie kann ich das tun?

%Vor%

funktioniert nicht.

    
Charles 01.12.2010, 08:12
quelle

3 Antworten

4

Mit den neuen Versionen von clang ist es jetzt möglich zu überprüfen, ob eingebaute intrinsics existieren, indem Sie das Makro __has_builtin() verwenden, z. B.

%Vor%

Hoffen wir, dass der GCC auch in Zukunft __has_builtin() unterstützt.

    
Linoliumz 28.01.2013, 22:13
quelle
3

Das Einzige, was von Anfang an funktioniert, ist, die gcc-Version zu testen und zu hoffen, dass dies auf allen Architekturen konsequent durchgeführt wird.

Das ist nicht garantiert, aber ich hatte kürzlich ein ähnliches Problem nicht mit eingebauten Funktionen, sondern mit __thread für lokalen Thread-Speicher. Dies ist auf einigen Architekturen (linux) implementiert, aber nicht auf anderen (OS X, bsd?) Und es gab keine Möglichkeit, dies mit einem Makro herauszufinden.

Wenn Sie gnu make haben, können Sie etwas ähnliches tun, um die Existenz einer bestimmten Funktion in Ihrem Makefile zu erkennen:

%Vor%

Dies vermeidet die Verwendung komplexerer Konfigurationsdienstprogramme.

    
Jens Gustedt 01.12.2010 08:49
quelle
2

Die #ifdef -Direktive prüft, ob __builtin_ctzll als Makro Name definiert ist, es hilft Ihnen nicht zu bestimmen, ob eine __builtin_ctzll Funktion existiert.

Ich bin nicht vertraut genug mit gcc builtins, um Ihnen mehr als das zu helfen: wie könnte das Innere fehlen?

    
icecrime 01.12.2010 08:22
quelle

Tags und Links