XOR-swap
2つの値を一時変数を使わずに交換する
code:pseudo
a ^= b
b ^= a
a ^= b
注意: aとbが同じ変数だと1行目で両者0になって壊れます。違う変数なら同じ値が入っていても大丈夫。
このテクニックそのものを使うことは現代では少ない
レジスタリネーミングにより愚直に退避用のレジスタを使ったswapがほぼノーコストで行えるため
(物理レジスタではなく)論理レジスタがちょうど1個だけ足りないときに使えるかも…? でもおそらく普通にspillさせても大したペナルティにならなさそう…
CPU命令
レジスタ間のswap命令あればそれを使うのがよさそう
なくても退避用のレジスタを用意してmovを3回すればよい(上述)
ソフトウェア実装
疑似コードの通り
ハードウェア実装
愚直でよさそう