These files have been cleaned up style wise, and some macros have been resolved like they were for the header files. Change-Id: I447e5311961036847e7da0c5a86c0da25a633010 Reviewed-on: https://gem5-review.googlesource.com/10844 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
163 lines
4.0 KiB
C++
163 lines
4.0 KiB
C++
/*****************************************************************************
|
|
|
|
Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
|
|
more contributor license agreements. See the NOTICE file distributed
|
|
with this work for additional information regarding copyright ownership.
|
|
Accellera licenses this file to you under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with the
|
|
License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
permissions and limitations under the License.
|
|
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
|
|
sc_unsigned_bitref.h -- Proxy class that is declared in sc_unsigned.h.
|
|
|
|
Original Author: Ali Dasdan, Synopsys, Inc.
|
|
|
|
*****************************************************************************/
|
|
|
|
/*****************************************************************************
|
|
|
|
MODIFICATION LOG - modifiers, enter your name, affiliation, date and
|
|
changes you are making here.
|
|
|
|
Name, Affiliation, Date:
|
|
Description of Modification:
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// CLASS : sc_unsigned_bitref_r
|
|
//
|
|
// Proxy class for sc_unsigned bit selection (r-value only).
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// implicit conversion to uint64
|
|
|
|
sc_unsigned_bitref_r::operator uint64 () const
|
|
{
|
|
return m_obj_p->test(m_index);
|
|
}
|
|
|
|
bool
|
|
sc_unsigned_bitref_r::operator ! () const
|
|
{
|
|
return (!m_obj_p->test(m_index));
|
|
}
|
|
|
|
bool
|
|
sc_unsigned_bitref_r::operator ~ () const
|
|
{
|
|
return (!m_obj_p->test(m_index));
|
|
}
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// CLASS : sc_unsigned_bitref
|
|
//
|
|
// Proxy class for sc_unsigned bit selection (r-value and l-value).
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// assignment operators
|
|
|
|
const sc_unsigned_bitref &
|
|
sc_unsigned_bitref::operator = (const sc_unsigned_bitref_r &b)
|
|
{
|
|
m_obj_p->set(m_index, (bool)b);
|
|
return *this;
|
|
}
|
|
|
|
const sc_unsigned_bitref &
|
|
sc_unsigned_bitref::operator = (const sc_unsigned_bitref &b)
|
|
{
|
|
m_obj_p->set(m_index, (bool)b);
|
|
return *this;
|
|
}
|
|
|
|
const sc_unsigned_bitref &
|
|
sc_unsigned_bitref::operator = (bool b)
|
|
{
|
|
m_obj_p->set(m_index, b);
|
|
return *this;
|
|
}
|
|
|
|
|
|
const sc_unsigned_bitref &
|
|
sc_unsigned_bitref::operator &= (bool b)
|
|
{
|
|
if (!b) {
|
|
m_obj_p->clear(m_index);
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
const sc_unsigned_bitref &
|
|
sc_unsigned_bitref::operator |= (bool b)
|
|
{
|
|
if (b) {
|
|
m_obj_p->set(m_index);
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
const sc_unsigned_bitref &
|
|
sc_unsigned_bitref::operator ^= (bool b)
|
|
{
|
|
if (b) {
|
|
m_obj_p->invert(m_index);
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// #### OPTIMIZE
|
|
void
|
|
sc_unsigned_bitref::concat_set(int64 src, int low_i)
|
|
{
|
|
bool value = 1 & ((low_i < 64) ? (src >> low_i) : (src >> 63));
|
|
m_obj_p->set(low_i, value);
|
|
}
|
|
|
|
void
|
|
sc_unsigned_bitref::concat_set(const sc_signed &src, int low_i)
|
|
{
|
|
if (low_i < src.length())
|
|
m_obj_p->set(low_i, src.test(low_i));
|
|
else
|
|
m_obj_p->set(low_i, src < 0);
|
|
}
|
|
|
|
void
|
|
sc_unsigned_bitref::concat_set(const sc_unsigned &src, int low_i)
|
|
{
|
|
if (low_i < src.nbits)
|
|
m_obj_p->set(low_i, src.test(low_i));
|
|
else
|
|
m_obj_p->set(low_i, 0);
|
|
}
|
|
|
|
void
|
|
sc_unsigned_bitref::concat_set(uint64 src, int low_i)
|
|
{
|
|
bool value = ((low_i < 64) ? (src >> low_i) & 1 : 0);
|
|
m_obj_p->set(low_i, value);
|
|
}
|
|
|
|
// other methods
|
|
void
|
|
sc_unsigned_bitref::scan(::std::istream &is)
|
|
{
|
|
bool b;
|
|
is >> b;
|
|
*this = b;
|
|
}
|