キャリ〜フラグの計算
Z80、x86、PPC、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; }
これが精一杯にゃんだろうか。