ARM
ARM-käskykannan ominaisuuksia

ARM soveltuu pienikokoisiin laitteisiin hyvin, koska sen voi toteuttaa suhteellisen vähäisellä logiikkamäärällä tehokkuuteensa nähden. Esimerkiksi ARM2:ssa oli vain noin 30 000 transistoria, mutta se oli silti nopeampi kuin samalla kellotaajuudella ajettu Motorola 68000, jossa transistoreja oli noin 68 000. Pienestä koostaan huolimatta ARM-prosessorit ovat varteenotettavia prosessoreita, koska ne voivat sisältää esimerkiksi muistinhallintayksikön (MMU), joka mahdollistaa kehittyneiden käyttöjärjestelmien ajamisen.
ARM-käskykanta on RISC-tyyppinen load-store-arkkitehtuuri, jossa on suuri määrä rekistereitä ja pieni määrä komentoja. Operaatiot tehdään rekisterien välillä. Muistia käsittelevät vain muistinlataus- ja tallennuskäskyt. ARM sisältää kuitenkin myös joukon RISC-kantaa ilmaisuvoimaisempia käskyjä, kuten käskyt pinon käyttämiseen. Lisäksi normaaleihin aritmeettisiin käskyihin voidaan liittää toisen parametrin bittien siirto (shiftaus). Miltei jokainen käsky voi olla ehdollinen, eli käsky voidaan joko suorittaa tai olla suorittamatta riippuen jonkun ehtorekisterin arvosta. Sen avulla voidaan välttää osa ohjelmakoodin ehdollisista haarautumisista, jolla saadaan pidettyä suorittimen liukuhihnat täynnä ja parannettua välimuistin osumatarkkuutta, joka parantaa suorituskykyä.
Muistin osoitusmoodien ollessa rajattu kaikki käskyt voidaan koodata täsmälleen 32-bitillä. Käskyt voidaan tasata muistiosoitteisiin ja käskyn purkaminen voidaan toteuttaa hyvin yksinkertaisesti.
Vertailun vuoksi x86-suorittimissa käskykoko vaihtelee ja ne ratkaisevat haittapuolia purkamalla käskyt yksinkertaisempiin RISC-tyyppisiin mikro-operaatioihin.
Normaalit ARM-käskyt ovat 32 bittiä pitkiä. ARMv4T ja myöhemmät sisältävät 16-bittisen käskykannan nimeltä Thumb. Thumb-käskykannassa on suurin osa 32-bittisestä toiminnallisuudesta, mutta jotkin operaatiot vaativat useampia käskyjä. Thumb mahdollistaa tiiviimmän ohjelmakoodin suorituskyvyn kustannuksella. ARMv6T sisältää 32-bittisen Thumb-käskykannan (Thumb-2). ARMv7T määrittelee ThumbEE-käskykannan laitteella luotua koodia varten. ARM-tilassa käskyt tallennetaan sanapituuteen tasattuihin osoitteisiin, mutta Thumb- ja ThumbEE-tiloissa käskyt voivat olla puolisanaan tasattuja.
Thumb-tilassa ohjelmamuistia sekä ohjelmamuistin ja prosessorin välistä muistiväylää tarvitaan vähemmän ja prosessorin toiminta on rajoittunutta: esimerkiksi vapaasti käytettävien rekisterien määrä on rajoitettu kahdeksaan, eikä muiden kuin hyppykäskyjen suoritus voi olla ehdollista.
ARMissa on 30 kappaletta 32-bittisiä yleiskäyttöisiä rekistereitä, joista 15 on jatkuvasti saatavilla riippuen suorittimen tilasta. Ohjelmalaskuria (PC, R15) ei lasketa mukaan yleiskäyttöisiin rekistereihin. Pino-osoitin (SP, R13) ja linkkirekisteri (LR, R14) ovat erityiskäyttöön tarkoitettuja. Osa rekistereistä on käytettävissä vain eritysoikeustilassa.
Useimmat 16-bittiset Thumb-käskyt voivat käyttää vain kahdeksaa ensimmäistä rekisteriä (R0–R7), joita kutsutaan alemmiksi rekistereiksi (Lo). Ylemmät rekisterit (Hi) ovat R8–R12, SP, LR ja PC. 32-bittisessä Thumb-tilassa kaikki käskyt voivat käyttää rekistereitä R0–R12 sekä LR-rekisteriä. Useimmat Thumb-käskyt eivät voi käyttää ohjelmalaskuria (PC). ARM-tilassa kaikki käskyt voivat käyttää rekistereitä R0–R12, SP ja LR sekä useimmat voivat käyttää ohjelmalaskuria PC.
Tavujärjestys on bi-endian ARM6-malleista eteenpäin, joka tarkoittaa että suoritin tukee molempia mahdollisuuksia (little, big). Vanhat mallit olivat vain pieni-endiaanisia (ARM2, ARM3, ARM2aS).
Monien muiden suorittimien tavoin ARM tukee eri toimintamoodeja: käyttäjätila tavallisille ohjelmille ja järjestelmätila (system mode) käyttöjärjestelmän koodille. ARMv7:stä lähtien mukana on laitteistotuki hypervisor-virtualisoinnille, joka ARMv8:ssa on osa arkkitehtuuria suoritustasonimellä EL2. EL1-suoritustaso on käyttöjärjestelmän ytimelle ja EL0-taso ilman eritysoikeuksia suoritettavalle koodille. Lisäksi on toimintojen avuksi on kehitetty uusia keskeytyskäsittelijöitä (GIC) sekä IOMMU-tuki (SMMU ARM-arkkitehtuurissa).
VFP apusuoritin sisältää tuen liukulukuaritmetiikalle. VFP ja NEON-laajennus jakavat rekistereitä.
ARM-suorittimien big.LITTLE-arkkitehtuuri yhdistää kahden tyyppistä erikoistunutta prosessoria, jossa "LITTLE" tähtää energiatehokkuuteen (pieneen virrankäyttöön) ja "big" laskentatehoon. Arkkitehtuuri on suunnattu tilanteisiin, joissa käyttö vaihtelee kuten mobiililaitteissa, joissa on pitkiä vähäisen virrankäytön jaksoja ja hetkittäisiä suuremman suorituskyvyn tarpeita.