gem5
v24.0.0.0
Loading...
Searching...
No Matches
mem
ruby
common
WriteMask.cc
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012-2015 Advanced Micro Devices, Inc.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are
7
* met: redistributions of source code must retain the above copyright
8
* notice, this list of conditions and the following disclaimer;
9
* redistributions in binary form must reproduce the above copyright
10
* notice, this list of conditions and the following disclaimer in the
11
* documentation and/or other materials provided with the distribution;
12
* neither the name of the copyright holders nor the names of its
13
* contributors may be used to endorse or promote products derived from
14
* this software without specific prior written permission.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
#include "
mem/ruby/common/WriteMask.hh
"
30
31
#include <string>
32
33
#include "
mem/ruby/system/RubySystem.hh
"
34
35
namespace
gem5
36
{
37
38
namespace
ruby
39
{
40
41
WriteMask::WriteMask
()
42
: mSize(
RubySystem
::getBlockSizeBytes()), mMask(mSize, false),
43
mAtomic(false)
44
{}
45
46
void
47
WriteMask::print
(std::ostream& out)
const
48
{
49
std::string str(
mSize
,
'0'
);
50
for
(
int
i
= 0;
i
<
mSize
;
i
++) {
51
str[
i
] =
mMask
[
i
] ? (
'1'
) : (
'0'
);
52
}
53
out <<
"dirty mask="
54
<< str
55
<< std::flush;
56
}
57
58
void
59
WriteMask::performAtomic
(uint8_t *
p
,
60
std::deque<uint8_t*>
& log,
bool
isAtomicNoReturn)
const
61
{
62
int
offset
;
63
uint8_t *block_update;
64
// Here, operations occur in FIFO order from the mAtomicOp
65
// vector. This is done to match the ordering of packets
66
// that was seen when the initial coalesced request was created.
67
for
(
int
i
= 0;
i
<
mAtomicOp
.size();
i
++) {
68
if
(!isAtomicNoReturn) {
69
// Save the old value of the data block in case a
70
// return value is needed
71
block_update =
new
uint8_t[
mSize
];
72
std::memcpy(block_update,
p
,
mSize
);
73
log.push_back(block_update);
74
}
75
// Perform the atomic operation
76
offset
=
mAtomicOp
[
i
].first;
77
AtomicOpFunctor
*fnctr =
mAtomicOp
[
i
].second;
78
(*fnctr)(&
p
[
offset
]);
79
}
80
}
81
82
}
// namespace ruby
83
}
// namespace gem5
RubySystem.hh
WriteMask.hh
gem5::ruby::RubySystem
Definition
RubySystem.hh:64
gem5::ruby::WriteMask::performAtomic
void performAtomic(uint8_t *p, std::deque< uint8_t * > &atomicChangeLog, bool isAtomicNoReturn=true) const
Definition
WriteMask.cc:59
gem5::ruby::WriteMask::mAtomicOp
AtomicOpVector mAtomicOp
Definition
WriteMask.hh:253
gem5::ruby::WriteMask::mMask
std::vector< bool > mMask
Definition
WriteMask.hh:251
gem5::ruby::WriteMask::WriteMask
WriteMask()
Definition
WriteMask.cc:41
gem5::ruby::WriteMask::mSize
int mSize
Definition
WriteMask.hh:250
gem5::ruby::WriteMask::print
void print(std::ostream &out) const
Definition
WriteMask.cc:47
std::deque
STL deque class.
Definition
stl.hh:44
gem5::ArmISA::i
Bitfield< 7 > i
Definition
misc_types.hh:67
gem5::ArmISA::offset
Bitfield< 23, 0 > offset
Definition
types.hh:144
gem5::MipsISA::p
Bitfield< 0 > p
Definition
pra_constants.hh:326
gem5
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition
binary32.hh:36
gem5::AtomicOpFunctor
Definition
amo.hh:44
Generated on Tue Jun 18 2024 16:24:05 for gem5 by
doxygen
1.11.0