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"
117 init(
a.back_cast().length());
323 template <
class X,
class Y>
327 X &
x =
px.back_cast();
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>
418 X &
x =
px.back_cast();
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>
448 inline const sc_lv_base
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>
509 X &
x =
px.back_cast();
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>
539 inline const sc_lv_base
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) {
632 x.set_word(
i,
a.get_word(
i) |
b.get_word(
i));
633 x.set_cword(
i,
a.get_cword(
i) |
b.get_cword(
i));
655 "positive rotate values, rotate value = ",
n);
658 int len =
x.length();
664 for (
int i = 0;
i < sz; ++
i) {
665 x.set_word(
i,
a.get_word(
i) |
b.get_word(
i));
666 x.set_cword(
i,
a.get_cword(
i) |
b.get_cword(
i));
682 inline const sc_lv_base
690 template <
class X,
class Y>
694 const X &
x =
px.back_cast();
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>
756 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
764 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
772 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
780 inline sc_concref_r<sc_bitref_r<T>, sc_bv_base>
788 inline sc_concref_r<sc_bv_base, sc_bitref_r<T> >
796 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
804 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
812 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
820 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
828 inline sc_concref_r<sc_bitref_r<T>, sc_bv_base>
836 inline sc_concref_r<sc_bv_base, sc_bitref_r<T> >
845 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
853 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
861 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
869 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
877 inline sc_concref_r<sc_bitref_r<T>, sc_bv_base>
885 inline sc_concref_r<sc_bv_base, sc_bitref_r<T> >
893 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
901 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
909 inline sc_concref_r<sc_bitref_r<T>, sc_lv_base>
917 inline sc_concref_r<sc_lv_base, sc_bitref_r<T> >
925 inline sc_concref_r<sc_bitref_r<T>, sc_bv_base>
933 inline sc_concref_r<sc_bv_base, sc_bitref_r<T> >
949 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
957 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
965 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
973 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
981 inline sc_concref_r<sc_subref_r<T>, sc_bv_base>
989 inline sc_concref_r<sc_bv_base, sc_subref_r<T> >
997 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
1005 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
1013 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
1021 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
1029 inline sc_concref_r<sc_subref_r<T>, sc_bv_base>
1037 inline sc_concref_r<sc_bv_base, sc_subref_r<T> >
1046 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
1054 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
1062 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
1070 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
1078 inline sc_concref_r<sc_subref_r<T>, sc_bv_base>
1086 inline sc_concref_r<sc_bv_base, sc_subref_r<T> >
1095 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
1103 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
1111 inline sc_concref_r<sc_subref_r<T>, sc_lv_base>
1119 inline sc_concref_r<sc_lv_base, sc_subref_r<T> >
1127 inline sc_concref_r<sc_subref_r<T>, sc_bv_base>
1135 inline sc_concref_r<sc_bv_base, sc_subref_r<T> >
1150 inline sc_subref<X> &
1154 int len =
sc_min(this->length(),
t.length());
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());
1172 int len =
sc_min(this->length(),
t.length());
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>
1203 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1210 template <
class T1,
class T2>
1211 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1218 template <
class T1,
class T2>
1219 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1226 template <
class T1,
class T2>
1227 inline sc_concref_r<sc_concref_r<T1, T2>, sc_bv_base>
1234 template <
class T1,
class T2>
1235 inline sc_concref_r<sc_bv_base, sc_concref_r<T1, T2> >
1242 template <
class T1,
class T2>
1243 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1250 template <
class T1,
class T2>
1251 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1258 template <
class T1,
class T2>
1259 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1266 template <
class T1,
class T2>
1267 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1274 template <
class T1,
class T2>
1275 inline sc_concref_r<sc_concref_r<T1, T2>, sc_bv_base>
1282 template <
class T1,
class T2>
1283 inline sc_concref_r<sc_bv_base, sc_concref_r<T1, T2> >
1291 template <
class T1,
class T2>
1292 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1299 template <
class T1,
class T2>
1300 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1307 template <
class T1,
class T2>
1308 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1315 template <
class T1,
class T2>
1316 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1323 template <
class T1,
class T2>
1324 inline sc_concref_r<sc_concref_r<T1, T2>, sc_bv_base>
1331 template <
class T1,
class T2>
1332 inline sc_concref_r<sc_bv_base, sc_concref_r<T1, T2> >
1339 template <
class T1,
class T2>
1340 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1347 template <
class T1,
class T2>
1348 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1355 template <
class T1,
class T2>
1356 inline sc_concref_r<sc_concref_r<T1, T2>, sc_lv_base>
1363 template <
class T1,
class T2>
1364 inline sc_concref_r<sc_lv_base, sc_concref_r<T1, T2> >
1371 template <
class T1,
class T2>
1372 inline sc_concref_r<sc_concref_r<T1, T2>, sc_bv_base>
1379 template <
class T1,
class T2>
1380 inline sc_concref_r<sc_bv_base, sc_concref_r<T1, T2> >
1398 inline sc_concref_r<T, sc_lv_base>
1405 inline sc_concref_r<sc_lv_base, T>
1412 inline sc_concref_r<T, sc_lv_base>
1420 inline sc_concref_r<sc_lv_base, T>
1428 inline sc_concref_r<T, sc_bv_base>
1436 inline sc_concref_r<sc_bv_base, T>
1444 inline sc_concref_r<T, sc_lv_base>
1451 inline sc_concref_r<sc_lv_base, T>
1458 inline sc_concref_r<T, sc_lv_base>
1466 inline sc_concref_r<sc_lv_base, T>
1474 inline sc_concref_r<T, sc_bv_base>
1482 inline sc_concref_r<sc_bv_base, T>
1491 inline sc_concref_r<T, sc_lv_base>
1498 inline sc_concref_r<sc_lv_base, T>
1505 inline sc_concref_r<T, sc_lv_base>
1513 inline sc_concref_r<sc_lv_base, T>
1521 inline sc_concref_r<T, sc_bv_base>
1529 inline sc_concref_r<sc_bv_base, T>
1538 inline sc_concref_r<T, sc_lv_base>
1545 inline sc_concref_r<sc_lv_base, T>
1552 inline sc_concref_r<T, sc_lv_base>
1560 inline sc_concref_r<sc_lv_base, T>
1568 inline sc_concref_r<T, sc_bv_base>
1576 inline sc_concref_r<sc_bv_base, T>
1584 extern template class sc_proxy<sc_lv_base>;
1585 extern template class sc_proxy<sc_bv_base>;
sc_lv_base & operator=(const sc_proxy< X > &a)
sc_proxy< sc_lv_base > base_type
void set_bit(int i, value_type value)
sc_digit get_word(int wi) const
base_type::value_type value_type
void set_word(int wi, sc_digit w)
sc_digit get_cword(int wi) const
sc_lv_base(int length_=sc_length_param().len())
void set_cword(int wi, sc_digit w)
sc_lv_base(const sc_proxy< X > &a)
sc_lv_base(const sc_logic &a, int length_=sc_length_param().len())
void assign_from_string(const std::string &)
value_type get_bit(int i) const
void init(int length_, const sc_logic &init_value=SC_LOGIC_X)
traits_type::value_type value_type
const sc_lv_base operator>>(int n) const
const sc_lv_base operator~() const
const sc_lv_base operator<<(int n) const
sc_lv_base & assign_(const sc_proxy< Y > &a)
sc_subref< X > & operator=(const sc_proxy< Y > &a)
X & b_xor_assign_(sc_proxy< X > &a, const sc_proxy< Y > &b)
const sc_digit SC_DIGIT_ONE
X & operator|=(sc_proxy< X > &px, const sc_proxy< Y > &py)
const sc_lv_base reverse(const sc_proxy< X > &x)
const sc_lv_base lrotate(const sc_proxy< X > &x, int n)
const sc_digit SC_DIGIT_ZERO
X & operator^=(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_signed operator|(const sc_unsigned &u, const sc_int_base &v)
const sc_logic SC_LOGIC_X(Log_X)
const T sc_min(const T &a, const T &b)
sc_signed operator&(const sc_unsigned &u, const sc_int_base &v)
X & b_or_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_signed operator^(const sc_unsigned &u, const sc_int_base &v)
X & b_and_assign_(sc_proxy< X > &px, const sc_proxy< Y > &py)
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > concat(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
sc_concref_r< sc_bitref_r< T1 >, sc_bitref_r< T2 > > operator,(sc_bitref_r< T1 >, sc_bitref_r< T2 >)
bool operator==(const sc_signed &u, const sc_int_base &v)
void assign_p_(sc_proxy< X > &px, const sc_proxy< Y > &py)
X & operator&=(sc_proxy< X > &px, const sc_proxy< Y > &py)
const sc_digit SC_DIGIT_TWO
const sc_lv_base rrotate(const sc_proxy< X > &x, int n)
void sc_proxy_out_of_bounds(const char *msg, int64 val)
#define DEFN_BITWISE_AND_OP_T_B(tp)
#define DEFN_BITWISE_AND_OP_T_A(tp)
#define DEFN_BITWISE_AND_ASN_OP_T(tp)
#define DEFN_BITWISE_OR_OP_T_B(tp)
#define DEFN_BITWISE_OR_OP_T_A(tp)
#define DEFN_BITWISE_XOR_ASN_OP_T(tp)
#define DEFN_BITWISE_XOR_OP_T_A(tp)
#define DEFN_BITWISE_XOR_OP_T_B(tp)
#define DEFN_BITWISE_OR_ASN_OP_T(tp)
#define DEFN_REL_OP_T(tp)