- Intrinsische Funktion
-
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 ist durch die Namensgebung der Intrinsic Functions sichergestellt, dass sie sich von library- oder eigenen Funktionen unterscheiden, zum Beispiel durch zwei Unterstriche als Präfix.
Beispiele
Die Programmzeile
u32_intvalue = __ROUND(f_floatvalue);
wird vom C-Compiler für den R32C in den Assembler-Code ROUND übersetzt, wobei der Compiler die Kontrolle über die für die Variablen verwendeten Prozessor-Register hat[2]. Der ROUND-Opcode wandelt beim R32C eine Gleitkommazahl unter Berücksichtigung des für den Prozessor eingestellten Rundungsmodus in eine Integer-Zahl um.
Microsoft und Intel's C/C++ compiler sowie auch GCC implementieren intrinsische Funktionen die direkt auf die x86 SIMD Instruktionen (MMX, SSE, SSE2, SSE3, SSSE3, SSE4) abgebildet werden. In den neueren Versionen der Microsoft Compiter (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 intrisische Funktionen hinzugefügt, die auf Standard Assembler Instruktionen, wie bit scan, abgebildet werden, die ansonsten nicht durch C/C++ erreichbar sind.
Einzelnachweise
- ↑ Visual C++ Language Reference Kapitel Compiler Intrinsics von Microsoft im MSDN
- ↑ Absatz INTRINSIC FUNCTIONS im R32C IAR C/C++ Compiler Reference Guide der Fa. IAR Systems
- ↑ Visual Studio 2010 SDK: Intrinsics and Inline Assembly. Microsoft. Abgerufen am 16. April 2010.
Wikimedia Foundation.