64 #ifndef __SYSTEMC_EXT_DT_BIT_SC_LV_BASE_HH__ 65 #define __SYSTEMC_EXT_DT_BIT_SC_LV_BASE_HH__ 67 #include "../int/sc_length_param.hh" 233 void set_bit(
int i, value_type value);
287 m_data[wi] &= value << bi | ~mask;
288 m_ctrl[wi] &= value >> 1 << bi | ~mask;
323 template <
class X,
class Y>
333 #define DEFN_BITWISE_AND_ASN_OP_T(tp) \ 336 sc_proxy<X>::operator &= (tp b) \ 338 X &x = back_cast(); \ 339 sc_lv_base a(x.length()); \ 341 return b_and_assign_(x, a); \ 354 #undef DEFN_BITWISE_AND_ASN_OP_T 356 template <
class X,
class Y>
364 #define DEFN_BITWISE_AND_OP_T_A(tp) \ 366 inline const sc_lv_base \ 367 sc_proxy<X>::operator & (tp b) const \ 369 sc_lv_base a(back_cast()); \ 387 #undef DEFN_BITWISE_AND_OP_T_A 389 #define DEFN_BITWISE_AND_OP_T_B(tp) \ 391 inline const sc_lv_base \ 392 operator & (tp b, const sc_proxy<X> &px) \ 411 #undef DEFN_BITWISE_AND_OP_T_B 414 template <
class X,
class Y>
424 #define DEFN_BITWISE_OR_ASN_OP_T(tp) \ 427 sc_proxy<X>::operator |= (tp b) \ 429 X &x = back_cast(); \ 430 sc_lv_base a(x.length()); \ 432 return b_or_assign_(x, a); \ 445 #undef DEFN_BITWISE_OR_ASN_OP_T 447 template <
class X,
class Y>
455 #define DEFN_BITWISE_OR_OP_T_A(tp) \ 457 inline const sc_lv_base \ 458 sc_proxy<X>::operator | (tp b) const \ 460 sc_lv_base a(back_cast()); \ 478 #undef DEFN_BITWISE_OR_OP_T_A 480 #define DEFN_BITWISE_OR_OP_T_B(tp) \ 482 inline const sc_lv_base \ 483 operator | (tp b, const sc_proxy<X> &px) \ 502 #undef DEFN_BITWISE_OR_OP_T_B 505 template <
class X,
class Y>
515 #define DEFN_BITWISE_XOR_ASN_OP_T(tp) \ 518 sc_proxy<X>::operator ^= (tp b) \ 520 X &x = back_cast(); \ 521 sc_lv_base a(x.length()); \ 523 return b_xor_assign_(x, a); \ 536 #undef DEFN_BITWISE_XOR_ASN_OP_T 538 template <
class X,
class Y>
546 #define DEFN_BITWISE_XOR_OP_T_A(tp) \ 548 inline const sc_lv_base \ 549 sc_proxy<X>::operator ^ (tp b) const \ 551 sc_lv_base a(back_cast()); \ 569 #undef DEFN_BITWISE_XOR_OP_T_A 571 #define DEFN_BITWISE_XOR_OP_T_B(tp) \ 573 inline const sc_lv_base \ 574 operator ^ (tp b, const sc_proxy<X> &px) \ 593 #undef DEFN_BITWISE_XOR_OP_T_B 622 "positive rotate values, rotate value = ", n);
625 int len = x.length();
631 for (
int i = 0;
i < sz; ++
i) {
655 "positive rotate values, rotate value = ", n);
658 int len = x.length();
664 for (
int i = 0;
i < sz; ++
i) {
690 template <
class X,
class Y>
696 int x_len = x.length();
697 int y_len = y.length();
698 if (x_len != y_len) {
702 for (
int i = 0;
i < sz; ++
i) {
703 if (x.get_word(
i) != y.get_word(
i) ||
704 x.get_cword(
i) != y.get_cword(
i)) {
711 #define DEFN_REL_OP_T(tp) \ 714 sc_proxy<X>::operator == (tp b) const \ 716 const X &x = back_cast(); \ 717 sc_lv_base y(x.length()); \ 748 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
751 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
764 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
767 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
780 inline sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
783 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>(
796 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
799 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
812 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
815 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
828 inline sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
831 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>(
845 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
848 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
861 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
864 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
877 inline sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
880 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>(
893 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
896 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
909 inline sc_concref_r<sc_bitref_r<T>,
sc_lv_base>
912 return sc_concref_r<sc_bitref_r<T>,
sc_lv_base>(
925 inline sc_concref_r<sc_bitref_r<T>,
sc_bv_base>
928 return sc_concref_r<sc_bitref_r<T>,
sc_bv_base>(
952 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
965 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
968 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
981 inline sc_concref_r<sc_subref_r<T>,
sc_bv_base>
984 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>(
997 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
1000 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1013 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
1016 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1029 inline sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1032 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>(
1046 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
1049 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1062 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
1065 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1078 inline sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1081 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>(
1095 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
1098 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1111 inline sc_concref_r<sc_subref_r<T>,
sc_lv_base>
1114 return sc_concref_r<sc_subref_r<T>,
sc_lv_base>(
1127 inline sc_concref_r<sc_subref_r<T>,
sc_bv_base>
1130 return sc_concref_r<sc_subref_r<T>,
sc_bv_base>(
1155 if (!this->reversed()) {
1156 for (
int i = len - 1;
i >= 0; --
i) {
1157 this->m_obj.set_bit(this->m_lo +
i, t[
i].value());
1160 for (
int i = len - 1;
i >= 0; --
i) {
1161 this->m_obj.set_bit(this->m_lo -
i, t[
i].value());
1173 if (!this->reversed()) {
1174 for (
int i = len - 1;
i >= 0; --
i) {
1175 this->m_obj.set_bit(this->m_lo +
i, t[
i].value());
1178 for (
int i = len - 1;
i >= 0; --
i) {
1179 this->m_obj.set_bit(this->m_lo -
i, t[
i].value());
1194 template <
class T1,
class T2>
1202 template <
class T1,
class T2>
1210 template <
class T1,
class T2>
1214 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1218 template <
class T1,
class T2>
1226 template <
class T1,
class T2>
1227 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>
1230 return sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>(
1234 template <
class T1,
class T2>
1242 template <
class T1,
class T2>
1243 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>
1246 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1250 template <
class T1,
class T2>
1258 template <
class T1,
class T2>
1259 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>
1262 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1266 template <
class T1,
class T2>
1274 template <
class T1,
class T2>
1275 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>
1278 return sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>(
1282 template <
class T1,
class T2>
1291 template <
class T1,
class T2>
1292 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>
1295 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1299 template <
class T1,
class T2>
1307 template <
class T1,
class T2>
1308 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>
1311 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1315 template <
class T1,
class T2>
1323 template <
class T1,
class T2>
1324 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>
1327 return sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>(
1331 template <
class T1,
class T2>
1339 template <
class T1,
class T2>
1340 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>
1343 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1347 template <
class T1,
class T2>
1355 template <
class T1,
class T2>
1356 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>
1359 return sc_concref_r<sc_concref_r<T1, T2>,
sc_lv_base>(
1363 template <
class T1,
class T2>
1371 template <
class T1,
class T2>
1372 inline sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>
1375 return sc_concref_r<sc_concref_r<T1, T2>,
sc_bv_base>(
1379 template <
class T1,
class T2>
1589 #endif // __SYSTEMC_EXT_DT_BIT_SC_LV_BASE_HH__
sc_bitref< X > * clone() const
sc_lv_base & operator &=(const char *b)
base_type::value_type value_type
#define DEFN_BITWISE_XOR_ASN_OP_T(tp)
#define DEFN_BITWISE_OR_OP_T_A(tp)
#define DEFN_BITWISE_AND_OP_T_A(tp)
sc_proxy< sc_lv_base > base_type
X & b_xor_assign_(sc_proxy< X > &a, const sc_proxy< Y > &b)
const sc_lv_base operator|(const char *b) const
void set_cword(int wi, sc_digit w)
sc_subref< X > * clone() const
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > operator,(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
const sc_digit SC_DIGIT_ZERO
const sc_lv_base operator &(const char *b) const
const sc_lv_base operator~() const
void sc_proxy_out_of_bounds(const char *msg, int64 val)
sc_bitref_r< T > * clone() const
X & b_or_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
void assign_from_string(const std::string &)
X & b_and_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
traits_type::value_type value_type
const T sc_min(const T &a, const T &b)
void set_bit(int i, value_type value)
sc_subref_r< X > * clone() const
sc_lv_base(int length_=sc_length_param().len())
sc_lv_base & operator=(const sc_proxy< X > &a)
#define DEFN_BITWISE_XOR_OP_T_A(tp)
const sc_lv_base operator>>(int n) const
sc_digit get_word(int wi) const
sc_subref< X > & operator=(const sc_proxy< Y > &a)
sc_lv_base(const sc_logic &a, int length_=sc_length_param().len())
void assign_p_(sc_proxy< X > &px, const sc_proxy< Y > &py)
const sc_lv_base operator^(const char *b) const
const sc_digit SC_DIGIT_TWO
value_type get_bit(int i) const
sc_concref_r< X, Y > * clone() const
#define DEFN_BITWISE_XOR_OP_T_B(tp)
const sc_digit SC_DIGIT_ONE
#define DEFN_BITWISE_OR_ASN_OP_T(tp)
sc_lv_base & operator^=(const char *b)
const sc_logic SC_LOGIC_X(Log_X)
sc_concref< X, Y > * clone() const
void init(int length_, const sc_logic &init_value=SC_LOGIC_X)
void set_word(int wi, sc_digit w)
sc_lv_base(const sc_proxy< X > &a)
bool operator==(const char *b) const
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
#define DEFN_BITWISE_OR_OP_T_B(tp)
sc_lv_base & operator|=(const char *b)
const sc_lv_base operator<<(int n) const
#define DEFN_REL_OP_T(tp)
#define DEFN_BITWISE_AND_ASN_OP_T(tp)
sc_lv_base & assign_(const sc_proxy< Y > &a)
sc_digit get_cword(int wi) const
#define DEFN_BITWISE_AND_OP_T_B(tp)