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.