Hochsprachen-Compiler unterstützen häufig sogenannte intrinsische Funktionen (englisch intrinsic functions oder kurz intrinsics wörtlich für Innere [Funktionen]; selten auch systeminterne Funktionen genannt), bei denen prozessorspezifische Operationen in Funktionsaufrufe gekapselt werden. Anders als bei der Verwendung von Inline-Assembler kann der Compiler Intrinsics in vollem Umfang bei Optimierungen berücksichtigen.
Häufig müssen für die Verwendung von Intrinsics bestimmte Header-Dateien eingebunden oder bestimmte Compiler-Optionen gesetzt werden. Meist sind Intrinsics besonders benannt, um sie leichter von Bibliotheks- oder [Entwickler-]eigenen Funktionen unterscheiden zu können, zum Beispiel durch zwei Unterstriche als Präfix.
Beispiele
Die Programmzeile
u32_intvalue = __ROUND(f_floatvalue);
wird vom IAR C-Compiler für den Prozessor R32C in den Assembler-Code ROUND
übersetzt, wobei der Compiler die Kontrolle über die Prozessor-Register hat, welche für die Variablen verwendet werden. (Der ROUND
-Opcode wandelt beim R32C eine Gleitkommazahl unter Berücksichtigung des für den Prozessor eingestellten Rundungsmodus in eine Integer-Zahl um.)
Situation in den Programmiersprachen C++ und C für x86
Microsofts und Intels C- und C++-Compiler sowie auch GCC bieten intrinsische Funktionen, die direkt auf SIMD-Instruktionen (MMX, SSE, SSE2, SSE3, SSSE3, SSE4) der x86-Prozessoren abbilden. In den neueren Versionen der Microsoft-Compiler (VC2005 und VC2008) wird kein Inline-Assembler für 64-Bit-Anwendungen unterstützt. Um das Fehlen des Inline-Assemblers zu kompensieren, wurden zusätzliche intrinsische Funktionen hinzugefügt, die auf Standard-Assembler-Instruktionen abgebildet werden (wie z. B. bit scan
), die ansonsten nicht durch C++ oder C erreichbar sind.
Einzelnachweise
- ↑ Kapitel Compiler Intrinsics. In: Visual C++ Language Reference, MSDN
- ↑ Absatz INTRINSIC FUNCTIONS (englisch). In: R32C IAR C/C++ Compiler Reference Guide, Fa. IAR Systems
- ↑ Intrinsics and Inline Assembly. In: Visual Studio 2010 SDK. Microsoft, abgerufen am 5. Januar 2016 (englisch). ; Übersetzung: Systeminterne Funktionen und Inlineassemblys