Intrinsische Funktion

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Hochsprachen-Compiler unterstützen häufig sogenannte Intrinsic Functions oder Intrinsics, bei denen prozessorspezifische Operationen in Funktionsaufrufe gekapselt werden. Anders als bei der Verwendung von Inline-Assembler kann der Compiler Intrinsic Functions in vollem Umfang bei Optimierungen berücksichtigen.

Häufig muss man für die Verwendung von Intrinsic Functions bestimmte Headerdateien einbinden und/oder bestimmte Compiler-Optionen setzen.[1] Meist sind Intrinsic Functions speziell benannt, um sie von Bibliotheks- oder eigenen Funktionen unterscheiden zu können, zum Beispiel durch zwei Unterstriche als Präfix.

Beispiele[Bearbeiten]

Die Programmzeile

u32_intvalue = __ROUND(f_floatvalue);

wird vom 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-Prozessoren[Bearbeiten]

Microsoft und Intels C- bzw. C++-Compiler sowie auch GCC bieten intrinsische Funktionen, die direkt auf die x86 SIMD Instruktionen (MMX, SSE, SSE2, SSE3, SSSE3, SSE4) abgebildet werden. 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[Bearbeiten]

  1. Visual C++ Language Reference Kapitel Compiler Intrinsics von Microsoft im MSDN
  2. Absatz INTRINSIC FUNCTIONS im R32C IAR C/C++ Compiler Reference Guide der Fa. IAR Systems
  3. Visual Studio 2010 SDK: Intrinsics and Inline Assembly. Microsoft. Abgerufen am 16. April 2010.