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.[1] 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.[2] (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.[3] 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

  1. Kapitel Compiler Intrinsics. In: Visual C++ Language Reference, MSDN
  2. Absatz INTRINSIC FUNCTIONS (englisch). In: R32C IAR C/C++ Compiler Reference Guide, Fa. IAR Systems
  3. Intrinsics and Inline Assembly (englisch) In: Visual Studio 2010 SDK. Microsoft. Abgerufen am 5. Januar 2016.; Übersetzung: Systeminterne Funktionen und Inlineassemblys