gem5
v24.1.0.1
Toggle main menu visibility
Main Page
Related Pages
Topics
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
o
p
q
r
s
t
v
x
Enumerator
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Classes
Class List
Class Index
Class Hierarchy
Class Members
All
:
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
w
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Related Symbols
:
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
Functions
a
b
c
d
e
f
g
h
i
l
m
n
o
p
s
t
v
w
Variables
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
Typedefs
a
b
c
d
g
h
i
l
m
r
s
t
u
w
Enumerations
b
h
i
o
p
Enumerator
h
i
o
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
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(0), mMask(mSize, false), mAtomic(false)
43
{}
41
WriteMask::WriteMask
() {
…
}
44
45
void
46
WriteMask::print
(std::ostream& out)
const
47
{
48
assert(
mSize
> 0);
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
}
46
WriteMask::print
(std::ostream& out)
const
{
…
}
57
58
void
59
WriteMask::performAtomic
(uint8_t *
p
,
60
std::deque<uint8_t*>
& log,
bool
isAtomicNoReturn)
const
61
{
62
assert(
mSize
> 0);
63
int
offset
;
64
uint8_t *block_update;
65
// Here, operations occur in FIFO order from the mAtomicOp
66
// vector. This is done to match the ordering of packets
67
// that was seen when the initial coalesced request was created.
68
for
(
int
i
= 0;
i
<
mAtomicOp
.size();
i
++) {
69
if
(!isAtomicNoReturn) {
70
// Save the old value of the data block in case a
71
// return value is needed
72
block_update =
new
uint8_t[
mSize
];
73
std::memcpy(block_update,
p
,
mSize
);
74
log.push_back(block_update);
75
}
76
// Perform the atomic operation
77
offset
=
mAtomicOp
[
i
].first;
78
AtomicOpFunctor
*fnctr =
mAtomicOp
[
i
].second;
79
(*fnctr)(&
p
[
offset
]);
80
}
81
}
59
WriteMask::performAtomic
(uint8_t *
p
, {
…
}
82
83
}
// namespace ruby
84
}
// namespace gem5
RubySystem.hh
WriteMask.hh
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:278
gem5::ruby::WriteMask::mMask
std::vector< bool > mMask
Definition
WriteMask.hh:276
gem5::ruby::WriteMask::WriteMask
WriteMask()
Definition
WriteMask.cc:41
gem5::ruby::WriteMask::mSize
int mSize
Definition
WriteMask.hh:275
gem5::ruby::WriteMask::print
void print(std::ostream &out) const
Definition
WriteMask.cc:46
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 Arm Limited All rights reserved.
Definition
binary32.hh:36
gem5::AtomicOpFunctor
Definition
amo.hh:44
Generated on Mon Jan 13 2025 04:28:40 for gem5 by
doxygen
1.9.8