SWP, SWPBが該当します。
SWP{cond}{B} Rd,Rm,[Rn] ; Rd=[Rn], [Rn]=Rm
RdにRnが指すメモリの内容を格納した後で、RmをRnが指すメモリに格納します。
ビット | 内容 |
---|---|
31-28 | 条件 |
27-23 | 必ず 0b00010 |
22 | B - スワップするデータの単位(0=32bit, 1=8bit) |
21-20 | 必ず 0b00 |
19-16 | Rn (R0..R14) |
15-12 | Rd (R0..R14) |
11-4 | 必ず 0b0000_1001 |
3-0 | Rm (R0..R14) |
SWP/SWPB はARMv2a以降でサポートされていますが、ARMv6で非推奨になり、ARMv7ではサポートしてもしなくてもどちらでもよくなり、ついにはARMv8で廃止されました。
RmとRnが同じレジスタを指すことも可能で、問題なく動作します。
SWP命令ではR15をRn,Rd,Rmとして指定することはできません。
Bが1、つまりバイト単位のスワップの場合、Rdの31-8bitは0になります。
実行時間: 1S+2N+1I