Zum Inhalt springen

Intrinsische Funktion

aus Wikipedia, der freien Enzyklopädie
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 15. April 2024 um 04:26 Uhr durch imported>Prüm (Einzelnachweise).
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Hochsprachen-Compiler unterstützen häufig sogenannte intrinsische Funktionen (englisch {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) oder kurz {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value) 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.<ref>Kapitel Compiler Intrinsics. In: Visual C++ Language Reference, MSDN</ref> 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 <syntaxhighlight lang="c">u32_intvalue = __ROUND(f_floatvalue);</syntaxhighlight> 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.<ref>Absatz INTRINSIC FUNCTIONS (englisch). In: R32C IAR C/C++ Compiler Reference Guide, Fa. IAR Systems</ref> (Der {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)-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.<ref>Vorlage:Cite book/Name: [Internetquelle: archiv-url ungültig Intrinsics and Inline Assembly.] In: Visual Studio 2010 SDK. Microsoft, , archiviert vom Vorlage:IconExternal (nicht mehr online verfügbar) am Vorlage:Cite book/URL; abgerufen am 5. Januar 2016 (englisch).Vorlage:Cite book/URLVorlage:Cite book/MeldungVorlage:Cite book/Meldung2Vorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/MeldungVorlage:Cite book/Meldung; Übersetzung: Systeminterne Funktionen und Inlineassemblys</ref> 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. {{Modul:Vorlage:lang}} Modul:Multilingual:153: attempt to index field 'data' (a nil value)), die ansonsten nicht durch C++ oder C erreichbar sind.

Einzelnachweise

<references />