4. Loogiset ja bittikäsittelykäskyt#

4.1. Dokumentin merkintätavat#

Merkintä: Rd, Rn tarkoittavat ARM-rekistereitä R0-R7, paitsi erikoiskäskyjen tapauksessa, joissa voidaan käyttää rekistereitä R0-R15. Rn<a-b> tarkoittaa ARM-rekisteriä, jonka sisällön on oltava välillä a <= contents <= b. Kahden rekisteriargumentin käskyjen tapauksessa argumentit saavat olla samat. Esimerkiksi seuraava nollaa R0:n (Pythonissa R0 ^= R0) sen alkuperäisestä sisällöstä riippumatta.

  • eor(r0, r0)

Nämä käskyt vaikuttavat ehtolippuihin, ellei toisin mainita.

4.2. Loogiset käskyt#

  • and_(Rd, Rn) Rd &= Rn

  • orr(Rd, Rn) Rd |= Rn

  • eor(Rd, Rn) Rd ^= Rn

  • mvn(Rd, Rn) Rd = Rn ^ 0xffffffff eli Rd = Rn:n 1:n komplementti

  • bic(Rd, Rn) Rd &= ~Rn bittien tyhjennys Rd:stä käyttäen Rn:n maskia

Huomaa, että käytetään ”and_” eikä ”and”, koska ”and” on Pythonissa varattu avainsana.

4.3. Siirto- ja kiertokäskyt#

  • lsl(Rd, Rn<0-31>) Rd <<= Rn

  • lsr(Rd, Rn<1-32>) Rd = (Rd & 0xffffffff) >> Rn Looginen siirto oikealle

  • asr(Rd, Rn<1-32>) Rd >>= Rn aritmeettinen siirto oikealle

  • ror(Rd, Rn<1-31>) Rd = rotate_right(Rd, Rn) Rd kierretään oikealle Rn bittiä.

Kierto (esimerkiksi) kolmella bitillä toimii seuraavasti. Jos Rd sisältää alun perin bitit b31 b30..b0, se sisältää kierron jälkeen b2 b1 b0 b31 b30..b3

4.4. Erikoiskäskyt#

Nämä käskyt eivät vaikuta ehtokoodeihin.

  • clz(Rd, Rn) Rd = count_leading_zeros(Rn)

count_leading_zeros(Rn) palauttaa binäärinollabittien lukumäärän ennen ensimmäistä binääriykkösbittiä Rn:ssä.

  • rbit(Rd, Rn) Rd = bit_reverse(Rn)

bit_reverse(Rn) palauttaa Rn:n bittikäännetyn sisällön. Jos Rn sisältää bitit b31 b30..b0, Rd asetetaan arvoon b0 b1 b2..b31

Loppunollat voidaan laskea suorittamalla bittikääntö ennen clz-käskyn suorittamista.