Intrinsische Funktion
# Intrinsische Funktion

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 prozessor­spezifische 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

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.

