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 + -
显示快捷键?