短くにゃれ
昔はこんにゃ感じだったにゃ。*1
register ccUINT32 op = m_nOpecode; register ccUINT32 target_addr = m_nReg[15] + (((ccUINT32)(((ccINT32)(op << 8)) >> 6)) | ((op >> 23) & 0x2)); m_nReg[15] = target_addr m_nReg[14] = m_nNextInstructAddress; /* 次の命令のアドレス */
これをにゃ、レジスタをint4個にゃにしてにゃ無駄に4個計算させるようにゃにするとにゃ、
m_nReg[15].vu32 = spu_add( m_nReg[15].vu32, (vec_uint4)spu_or( spu_rlmaska( spu_sl( m_nOpecode.v32, (vec_uint4){ 8, 8, 8, 8 } ), (vec_int4){ -6, -6, -6, -6 } ), spu_and( spu_rlmask( m_nOpecode.v32, (vec_int4){ -23, -23, -23, -23 } ), (vec_int4){ 2, 2, 2, 2 } ) ) ); m_nReg[14].vu32 = m_nNextInstructAddress.vu32; /* 次の命令のアドレス */
こんにゃ感じにゃに。ゴチャゴチャしてるけど……こっちにゃほうが命令数が減ってしかも早いのですにゃ。
いまさらにゃんですけどにゃ、Cellは変ですにゃね*2