Se samomodifikujicim se kodem se dalo hrat i jeste pozdeji v dobach DOSu, kdy se v realnem rezimu moc nehralo na kontrolu zapisu do code segmentu. Potom uz to v chranenem rezimu bylo horsi, ale porad jeste nejaka ta zmena navratove adresy na zasobniku byla mozna :) Vlastne nevim, jestli to jeste dneska jde, modifikovat navratovou adresu na zasobniku (assembler na x86/64 mi pripadne nudny :)
Jasně, změna kódu se neprojeví v instrukční frontě, a ta je různě dlouhá na různých CPU. Některé operace (přepínání režimu CPU např, stránkování), také často vyžadovali exekuci serializační instrukce, která by vyprázdnila instrukční frontu a načetla by instrukce podle nového režimu. Serializace je přitom tak drahá, že samomodifikující kód ztrácí na efektivitě
Samomodifikující se kód v zásadě je i cokoliv co generuje nativní kód ze zdrojáku za běhu, od jednoduchých toy forthů po slušná prostředí jako sbcl, a je to víc práce než na osmibitech.
U toy forthu co jsem si zkoušel psát to znamenalo po každém definovaném slově synchronizovat code a data, a snad taky vypnout ochranu na úrovni binárky. A mám pocit že na Armu ty bariéry byly ještě víc pruda.
Ale jde to, jen to už není rychlejší s tím vším flushováním a predikcemi. I když pořád asi může mít smysl vygenerovat nativní kód pro konkrétní situaci, pokud bude běžet dost dlouho beze změn.