1) PC patří mezi běžné pracovní registry u x86 stejně jako u ARMu.
Zkusíte-li si měnit r15 v řadě instrukcí, v řadě z nich to špatně dopadne. Pc/r15 je stejně výjimečný a trochu stranou jako u x86.
Co se debilní u ARMu je to, že v r15 není de facto adresa PC, takže r15 není ve skutečnosti PC. V r15 je zhusta adresa instrukce ve fázi dekódování, takže v r15 je rozdíl mezi PC a r15.
Pan Tišnovský na to ještě nepřišel, ale občas (dost často) je nutné získané hodnoty pc posouvat a to v závislosti na režimu – takové nalepováky se na x86 nedějí.
2) To, že v nějakém režimu je přístup jen 16 registrům bych raději moc netvrdil.
3) Rozšíření FLAGS -> EFLAGS řešilo u x86 hlavně to, aby něco nepřeplo režimy procesoru, jinak je to kompatibilní.
U ARMu ovšem, když se pouštíte do kritiky x86 je jiná nectnost, a to, že nezaručuje, že při špatném čísle režimu sázeném do CPSR vám to celé nezbuchne a neuletí do křeníkového nebe, přesněji do nutnosti restartu.
Na článku je příliš vidět, že pan Tišnovský to viděl hlavně teoreticky, ale v praxi by zjistil, že kritika x86, stejně jako jiná tvrzení jsou dost na hraně.
V ARMu se pohybujete low level a řada hodnot přímo adresuje jednotky a nebo se táký nějaké části uvnitř. x86 hodně odstiňuje a je velmi komfortní.
A to je ARM jeden z lepších procesorů.
Co by rozhodně mělo být zmíněno jsou tři fakty:
1) ARM má problémy s konstantami, díky fixed size délce instrukcí se mu do nich nevejdou všechny 32bitové konstanty a je třeba to obcházet. A to dost hnusně.
2) ARM má problémy dosáhnout pointery na větší vzdálenost. Pointery do 12bitového offsetu se dají uložit do některých instrukcí přímo, dále musíte použít registr a přidat další instrukce.
3) Load/store architektura je velmi čistá, ale řada věcí se tam řeší díky tomu přes ruku. Zpomaluje to výkon.
Díky 1,2,3 je velmi těžké optimalizovat instrukční sadu a najít nejefektivnější kód. Trvalo mnoho let experimentů, než se našly konvence, které jsou nejefektivnější.
Něco jiného je optimalizovat 4 instrukce a něco jiného delší kód, kde stačí jedna nevhodná hodnota konstanty a optimální kód instrukcí pak vypadá zcela jinak a vše je nutné překopat pokud jde o max. rychlost.
Vzhledem k omezené délce pointerů (ad 2) a omezené možnosti hodnot konstant (ad 1) je nutné rozhazovat hdonoty konstant a pointerů nikoli do datového segmentu nebo read only segmentu programu, ale poměrně nečistě přímo ke kódu. A je nutné třeba hodnoty konstant uložit několikrát, aby byly blízko ke kódu, který je používá, aby tam dosáhly offsety pointerů.
Teoreticky ARM vypadá jako príma a super, prakticky zjistíte, že je to maso, protože ARM v podstatě problémy hw architektury neřeší, ale hází je na krk přímo do strojáku ať je řeší programátor v asm. x86 naprosto tomu programátora od problémů dost odstiňuje a je mnohem luxusnější z pohledu asm.

