In More DepthにPowerPCの特徴が書いてあったのでまとめました。PowerPCはMIPSに近いアーキテクチャを持っています。一番の違い(The primary difference)は、2つの追加のアドレッシングモードと、いくつかの命令です。
Indexed Addressing と Update Addressing
PowerPCは、2つのレジスタの和をオペランドにすることができます。片方を配列の先頭(base)にし、もう片方をオフセット(index)として使います。これが indexed addressingと呼ばれます。
add $t0, $a0,$s3 lw $t1,0($t0)
MIPSの2命令が、PowerPCではこのような一命令で記述できます。
lw $t1,$a0+$s3
どちらも、$a0と$s3を足したアドレスにある値を、$t1に入れています。
配列にアクセスする場合、配列の順番にアクセス事が多いので、indexの部分を自動的にインクリメントする命令もあります。これが、update addressing と呼ばれます。
lwu $t1,$a0+$s3
この一命令で、$a0と$s3を足したアドレスにある値を$t1に入れ、$3を4増やしています。もう一度同じ命令をすると、配列の次のデータを取りに行きます。Cで言うところの、 x = *p++; に近い動きをします。Cでもポインタの型によって、増える値が違うように、PowerPCでもインクリメントする量によってlbzu、lhzu等の命令が用意されています。
特徴的な命令
load multiple and store multiple
32 wordまでのデータを、一命令でロード、ストア出来ます。レジスタの待避と復元を行うときに、コードサイズを小さくできます。
参考
G2 PowerPC Core Reference Manual
http://www.freescale.com/files/32bit/doc/ref_manual/G2CORERM.pdf