C intrinsics

Z MAM wiki

Přejít na: navigace, hledání

Jazyk C byl navržen s myšlenkou na dobré využití strojových instrukcí, a naopak při návrhu většiny procesorů byla uvážena možnost překladu z C, takže i bez jakýchkoli triků jsou při překladu z C možnosti procesoru využity velmi dobře. Pro některé architektury (třeba ARM) je překlad tak dobrý, že je extrémně těžké mu konkurovat ručně psaným assemblerem.

Jazyk C má dále řadu trochu neobvyklých konstrukcí, které přímo odpovídají strojové instrukci - třeba operace i++ odpovídající INC v assembleru či << odpovídající LSL (logical bit shift left). Asi čekáte, že dnešní překladače už jako INC samozřejmě přeloží i x=x+1, ale možná vás překvapí, že optimalizace také zvládne přeložit kryptické (a<<n)|((a&0xffffffff)>>(32-n)) jako ROTL (u PC).

Pokud toto vše nestačí, jsou tu intrinsics - procedury (či makra), které se přeloží jako jedna strojová instrukce mimořádných možností. Typicky zpřístupnují třeba různé instrukce na zjištění počtu jedničkových či nulových bitů (u PC třeba CLZ, CTZ a podobně) či SIMD instrukce (u PC sady MMX/SSE). Také sem patří instrukce na ovládání speciálních vlastností hardwaru.

[editovat] AVR intrinsics

sei()
cli()
wdt_reset()
Osobní nástroje