⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sc_nbfriends.inc

📁 system C源码 一种替代verilog的语言
💻 INC
📖 第 1 页 / 共 2 页
字号:
    ys = us;    xs = vs;  }  const sc_digit *xend = (x + xnd);  const sc_digit *yend = (y + ynd);  // x is longer than y.  small_type s = mul_signs(xs, ys);  if (s > 0) {    if (xs > 0) { // case 2      while (y < yend)        (*d++) = (*x++) & (*y++);      while (x++ < xend)         (*d++) = 0;    }    else {  // case 3      register sc_digit xcarry = 1;      register sc_digit ycarry = 1;      while (y < yend) {        xcarry += (~(*x++) & DIGIT_MASK);        ycarry += (~(*y++) & DIGIT_MASK);        (*d++) = (xcarry & ycarry) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;        ycarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        xcarry += (~(*x++) & DIGIT_MASK);        ycarry += DIGIT_MASK;        (*d++) = (xcarry & ycarry) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;        ycarry >>= BITS_PER_DIGIT;      }    }  }  else {    if (xs > 0) { // case 4      register sc_digit ycarry = 1;      while (y < yend) {        ycarry += (~(*y++) & DIGIT_MASK);        (*d++) = ((*x++) & ycarry) & DIGIT_MASK;        ycarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        ycarry += DIGIT_MASK;        (*d++) = ((*x++) & ycarry) & DIGIT_MASK;        ycarry >>= BITS_PER_DIGIT;      }    }    else {  // case 5      register sc_digit xcarry = 1;      while (y < yend) {        xcarry += (~(*x++) & DIGIT_MASK);        (*d++) = (xcarry & (*y++)) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;      }      while (x++ < xend)        (*d++) = 0;    }  }  s = convert_signed_2C_to_SM(nb, nd, dbegin);  return CLASS_TYPE(s, nb, nd, dbegin);  }// ----------------------------------------------------------------------------//  SECTION: Friend functions for OR operators.// ----------------------------------------------------------------------------// Handles the cases 3-5 and returns the result.CLASS_TYPE OR_HELPER(small_type us,           int unb, int und,           const sc_digit *ud,           small_type vs,          int vnb, int vnd,          const sc_digit *vd){    int nb = sc_max(unb, vnb);  int nd = sc_max(und, vnd);#ifdef SC_MAX_NBITS  sc_digit dbegin[MAX_NDIGITS];#else  sc_digit *dbegin = new sc_digit[nd];#endif  sc_digit *d = dbegin;  register const sc_digit *x;  register const sc_digit *y;  int xnd;  int ynd;  small_type xs;  small_type ys;  if (und >= vnd) {    x = ud;    y = vd;    xnd = und;    ynd = vnd;    xs = us;    ys = vs;  }  else {    y = ud;    x = vd;    ynd = und;    xnd = vnd;    ys = us;    xs = vs;  }  const sc_digit *xend = (x + xnd);  const sc_digit *yend = (y + ynd);  // x is longer than y.  small_type s = mul_signs(xs, ys);  if (s > 0) {    if (xs > 0) { // case 3      while (y < yend)        (*d++) = (*x++) | (*y++);      while (x < xend)        (*d++) = (*x++);    }    else {  // case 4      register sc_digit xcarry = 1;      register sc_digit ycarry = 1;      while (y < yend) {        xcarry += (~(*x++) & DIGIT_MASK);        ycarry += (~(*y++) & DIGIT_MASK);        (*d++) = (xcarry | ycarry) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;        ycarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        xcarry += (~(*x++) & DIGIT_MASK);        ycarry += DIGIT_MASK;        (*d++) = (xcarry | ycarry) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;        ycarry >>= BITS_PER_DIGIT;      }    }  }  else {    if (xs > 0) { // case 5      register sc_digit ycarry = 1;      while (y < yend) {        ycarry += (~(*y++) & DIGIT_MASK);        (*d++) = ((*x++) | ycarry) & DIGIT_MASK;        ycarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        ycarry += DIGIT_MASK;        (*d++) = ((*x++) | ycarry) & DIGIT_MASK;        ycarry >>= BITS_PER_DIGIT;      }    }    else {  // case 6      register sc_digit xcarry = 1;      while (y < yend) {        xcarry += (~(*x++) & DIGIT_MASK);        (*d++) = (xcarry | (*y++)) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        xcarry += (~(*x++) & DIGIT_MASK);        (*d++) = xcarry & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;      }    }  }  s = convert_signed_2C_to_SM(nb, nd, dbegin);  return CLASS_TYPE(s, nb, nd, dbegin);}// ----------------------------------------------------------------------------//  SECTION: Friend functions for XOR operators.// ----------------------------------------------------------------------------// Handles the cases 3-5 and returns the result.CLASS_TYPE XOR_HELPER(small_type us,            int unb, int und,            const sc_digit *ud,            small_type vs,           int vnb, int vnd,           const sc_digit *vd){    int nb = sc_max(unb, vnb);  int nd = sc_max(und, vnd);#ifdef SC_MAX_NBITS  sc_digit dbegin[MAX_NDIGITS];#else  sc_digit *dbegin = new sc_digit[nd];#endif  sc_digit *d = dbegin;  register const sc_digit *x;  register const sc_digit *y;  int xnd;  int ynd;  small_type xs;  small_type ys;  if (und >= vnd) {    x = ud;    y = vd;    xnd = und;    ynd = vnd;    xs = us;    ys = vs;  }  else {    y = ud;    x = vd;    ynd = und;    xnd = vnd;    ys = us;    xs = vs;  }  const sc_digit *xend = (x + xnd);  const sc_digit *yend = (y + ynd);  // x is longer than y.  small_type s = mul_signs(xs, ys);  if (s > 0) {    if (xs > 0) { // case 3      while (y < yend)        (*d++) = ((*x++) ^ (*y++)) & DIGIT_MASK;      while (x < xend)        (*d++) = (*x++);    }    else {  // case 4      register sc_digit xcarry = 1;      register sc_digit ycarry = 1;      while (y < yend) {        xcarry += (~(*x++) & DIGIT_MASK);        ycarry += (~(*y++) & DIGIT_MASK);        (*d++) = (xcarry ^ ycarry) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;        ycarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        xcarry += (~(*x++) & DIGIT_MASK);        ycarry += DIGIT_MASK;        (*d++) = (xcarry ^ ycarry) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;        ycarry >>= BITS_PER_DIGIT;      }    }  }  else {    if (xs > 0) { // case 5      register sc_digit ycarry = 1;      while (y < yend) {        ycarry += (~(*y++) & DIGIT_MASK);        (*d++) = ((*x++) ^ ycarry) & DIGIT_MASK;        ycarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        ycarry += DIGIT_MASK;        (*d++) = ((*x++) ^ ycarry) & DIGIT_MASK;        ycarry >>= BITS_PER_DIGIT;      }    }    else {  // case 6      register sc_digit xcarry = 1;      while (y < yend) {        xcarry += (~(*x++) & DIGIT_MASK);        (*d++) = (xcarry ^ (*y++)) & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;      }      while (x < xend) {        xcarry += (~(*x++) & DIGIT_MASK);        (*d++) = xcarry & DIGIT_MASK;        xcarry >>= BITS_PER_DIGIT;      }    }  }  s = convert_signed_2C_to_SM(nb, nd, dbegin);  return CLASS_TYPE(s, nb, nd, dbegin);}// End of file.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -