emu.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 270 行
C
270 行
int CVII4_int;int__divu (unsigned int num, unsigned int den){ unsigned int bit = 1; unsigned int res = 0; while (den < num && bit && !(den & (1L << 31))) { den <<= 1; bit <<= 1; } while (bit) { if (num >= den) { num -= den; res |= bit; } bit >>= 1; den >>= 1; } return res;}int__div (int a, int b){ int neg = 0; int res; if (a < 0) { a = -a; neg = !neg; } if (b < 0) { b = -b; neg = !neg; } res = __divu (a, b); if (neg) res = -res; return res;}int__modu (unsigned int num, unsigned int den){ unsigned int bit = 1; while (den < num && bit && !(den & (1L << 31))) { den <<= 1; bit <<= 1; } while (bit) { if (num >= den) num -= den; bit >>= 1; den >>= 1; } return num;}int__mod (int a, int b){ int neg = 0; int res; if (a < 0) { a = -a; neg = 1; } if (b < 0) b = -b; res = __modu (a, b); if (neg) res = -res; return res;}#if 0static unsigned intudivmodsi4 (unsigned int num, unsigned int den, int modwanted){ unsigned int bit = 1; unsigned int res = 0; while (den < num && bit && !(den & (1L << 31))) { den <<= 1; bit <<= 1; } while (bit) { if (num >= den) { num -= den; res |= bit; } bit >>= 1; den >>= 1; } if (modwanted) return num; return res;}int__div (int a, int b){ int neg = 0; int res; if (a < 0) { a = -a; neg = !neg; } if (b < 0) { b = -b; neg = !neg; } res = udivmodsi4 (a, b, 0); if (neg) res = -res; return res;}int__divu (int a, int b){ return udivmodsi4 (a, b, 0);}int__mod (int a, int b){ int neg = 0; int res; if (a < 0) { a = -a; neg = 1; } if (b < 0) b = -b; res = udivmodsi4 (a, b, 1); if (neg) res = -res; return res;}int__modu (int a, int b){ return udivmodsi4 (a, b, 1);}#endif#if 0int__mul (unsigned int a, int b){ int res = 0; while (a != 0) { if (a & 1) res += b; a >>= 1; b <<= 1; } return res;}unsigned int__sll (unsigned int a, int b){ if (b & 1) a <<= 1; if (b & 2) a <<= 2; if (b & 4) a <<= 4; if (b & 8) a <<= 8; if (b & 16) a <<= 16; return a;}int__sra (int a, int b){ if (b & 1) a >>= 1; if (b & 2) a >>= 2; if (b & 4) a >>= 4; if (b & 8) a >>= 8; if (b & 16) a >>= 16; return a;}unsigned int__srl (unsigned int a, int b){ if (b & 1) a >>= 1; if (b & 2) a >>= 2; if (b & 4) a >>= 4; if (b & 8) a >>= 8; if (b & 16) a >>= 16; return a;}#endifintfloat32_neg (int a){ return a == 0 ? 0 : (a ^ 0x80000000);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?