--- nono/m88xx0/m88100ops.cpp 2026/04/29 17:05:05 1.1.1.11 +++ nono/m88xx0/m88100ops.cpp 2026/04/29 17:05:07 1.1.1.12 @@ -5,6 +5,7 @@ // #include "m88100acc.h" +#include "bitops.h" #include #include @@ -115,7 +116,7 @@ m88kcpu::EnterBranch(uint32 toaddr) } // ブランチ間の命令がすべて NOP なら STOP ということにする。 if (nop_counter == d) { - atomic_reqflag |= CPU_REQ_STOP; + ChangeState(CPU_STATE_STOP); } // OpenBSD 6.6 では @@ -251,20 +252,6 @@ LSR(uint32 a, int n) return a >> n; } - -// 右ローテート -static inline uint32 -ROR(uint32 a, int n) -{ - // TODO: 各種コンパイラごとにビルトインがあったりなかったりするらしい - n &= 31; - if (n == 0) { - return a; - } else { - return (a >> n) | (a << (32 - n)); - } -} - // add でのオーバーフロー条件 static inline bool isovf_add(uint32 s1, uint32 s2, uint32 res) @@ -1309,7 +1296,7 @@ OP_DEF(rot_1) { if (FLD_D == 0) return; - rD = ROR(rS1, O5); + rD = ROR32(rS1, O5); } // 111100_bbbbbSSSSS_110100_0vvvvvvvvv @@ -1355,7 +1342,7 @@ OP_DEF(tb1) if (e.count == 3 && e.to == xip && e.from - e.to < 16) { - atomic_reqflag |= CPU_REQ_STOP; + ChangeState(CPU_STATE_STOP); } } } @@ -2009,7 +1996,7 @@ OP_DEF(rot_2) if (FLD_D == 0) return; int o = (rS2 ) & 0x1f; - rD = ROR(rS1, o); + rD = ROR32(rS1, o); } // 111101_zzzzzzzzzz_110000_00000sssss