キャリ〜フラグの計算

Z80x86PPC、ARMにゃらは、CPU自体にキャリ〜フラグがあるにゃのでいいんですがMIPSにゃにはにゃいんです。
MIPSでエミュとかやるときににゃキャリ〜フラグにゃの計算をにゃらにゃくてはいけにゃくて、どうやったら早くできるかにゃ〜って考え中にゃのです。(割り込み使わずにね)

足し算にゃ場合

// c = a + b;
bool CARRY(u32 a, u32 b, u32 c) {
 int cy = a & b & 1; /* 1bitの桁上がり */
 return
   (((a >> 1) + (b >> 1) + cy) >> 31)
     ? true : false;
}

1ビットシフトして足して、桁上がりを考えて…みゅ〜ん。


結果を使えるとするとにゃ

// c = a + b;
bool CARRY(u32 a, u32 b, u32 c) {
  return
    (((a & ~c) | (b & ~c)) >> 31)
       ? true : false;
}

これが精一杯にゃんだろうか。