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 &= Rnorr(Rd, Rn)
Rd |= Rneor(Rd, Rn)
Rd ^= Rnmvn(Rd, Rn)
Rd = Rn ^ 0xffffffffeli Rd = Rn:n 1:n komplementtibic(Rd, Rn)
Rd &= ~Rnbittien 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 <<= Rnlsr(Rd, Rn<1-32>)
Rd = (Rd & 0xffffffff) >> RnLooginen siirto oikealleasr(Rd, Rn<1-32>)
Rd >>= Rnaritmeettinen siirto oikealleror(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.