先日悔しい思いをしたので、G5のアセンブリコードを覗き見してみることにした。
int test(int n){
return n;
}↓
_test:
stmw r30,-8(r1)
stwu r1,-48(r1)
mr r30,r1
stw r3,72(r30)
lwz r0,72(r30)
mr r3,r0
lwz r1,0(r1)
lmw r30,-8(r1)
blr
86系とあまりに違い過ぎてまったくわからんのですけど(汗)。
PUSH命令がないので、スタックの実現のためにr1レジスタを代わりに駆使するってのは調べてわかった。後、「stw r3,72(r30)」は、PPC系ではスタックのこの部分にr3レジスタ〜に渡された引数を保存しておくと言う決まりらしい。最適化するとこの辺はすっきりさっぱりなくなってしまう。
で、ちょびっとだけ頑張ったけど、Intel MACが騒がれてるご時世だから、これ以上深入りする気はナシ(笑)。