gem5
v19.0.0.0
Main Page
Related Pages
Modules
+
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
+
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
m
n
o
p
r
s
t
u
v
w
x
+
Enumerations
a
b
c
d
e
f
i
l
m
o
p
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
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
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 Functions
:
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
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
+
Functions
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
z
+
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
z
+
Typedefs
a
b
c
d
e
f
g
h
i
l
m
n
o
p
r
s
t
u
v
w
+
Enumerations
a
b
c
d
e
f
g
i
l
m
o
p
r
s
t
v
w
+
Enumerator
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
+
Macros
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
sim
arguments.hh
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2003-2005 The Regents of The University of Michigan
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
* Authors: Nathan Binkert
29
*/
30
31
#ifndef __SIM_ARGUMENTS_HH__
32
#define __SIM_ARGUMENTS_HH__
33
34
#include <cassert>
35
#include <memory>
36
37
#include "
cpu/thread_context.hh
"
38
#include "
mem/fs_translating_port_proxy.hh
"
39
40
class
Arguments
41
{
42
protected
:
43
ThreadContext
*
tc
;
44
int
number
;
45
uint64_t
getArg
(uint16_t size = (uint16_t)(-1),
bool
fp
=
false
);
46
47
protected
:
48
class
Data
49
{
50
public
:
51
Data
(){}
52
~Data
();
53
54
private
:
55
std::list<char *>
data
;
56
57
public
:
58
char
*
alloc
(
size_t
size);
59
};
60
61
std::shared_ptr<Data>
data
;
62
63
public
:
64
Arguments
(
ThreadContext
*ctx,
int
n
= 0)
65
: tc(ctx), number(
n
), data(new
Data
())
66
{ assert(number >= 0); }
67
Arguments
(
const
Arguments
&args)
68
: tc(args.tc), number(args.number), data(args.data) {}
69
~Arguments
() {}
70
71
ThreadContext
*
getThreadContext
()
const
{
return
tc
; }
72
73
const
Arguments
&
operator=
(
const
Arguments
&args) {
74
if
(
this
!= &args) {
75
tc = args.
tc
;
76
number = args.
number
;
77
data = args.
data
;
78
}
79
return
*
this
;
80
}
81
82
// for checking if an argument is NULL
83
bool
operator!
() {
84
return
getArg
() == 0;
85
}
86
87
Arguments
&
operator++
() {
88
++
number
;
89
assert(number >= 0);
90
return
*
this
;
91
}
92
93
Arguments
operator++
(
int
) {
94
Arguments
args = *
this
;
95
++
number
;
96
assert(number >= 0);
97
return
args;
98
}
99
100
Arguments
&
operator--
() {
101
--
number
;
102
assert(number >= 0);
103
return
*
this
;
104
}
105
106
Arguments
operator--
(
int
) {
107
Arguments
args = *
this
;
108
--
number
;
109
assert(number >= 0);
110
return
args;
111
}
112
113
const
Arguments
&
operator+=
(
int
index
) {
114
number +=
index
;
115
assert(number >= 0);
116
return
*
this
;
117
}
118
119
const
Arguments
&
operator-=
(
int
index
) {
120
number -=
index
;
121
assert(number >= 0);
122
return
*
this
;
123
}
124
125
Arguments
operator[]
(
int
index
) {
126
return
Arguments
(tc, index);
127
}
128
129
template
<
class
T>
130
operator
T() {
131
assert(
sizeof
(T) <=
sizeof
(uint64_t));
132
T
d
=
static_cast<
T
>
(
getArg
(
sizeof
(T)));
133
return
d
;
134
}
135
136
template
<
class
T>
137
operator
T *() {
138
T *buf = (T *)data->alloc(
sizeof
(T));
139
tc->
getVirtProxy
().
readBlob
(
getArg
(
sizeof
(T)), buf,
sizeof
(T));
140
return
buf;
141
}
142
143
operator
char
*() {
144
char
*buf = data->alloc(2048);
145
tc->
getVirtProxy
().
readString
(buf,
getArg
(), 2048);
146
return
buf;
147
}
148
};
149
150
#endif // __SIM_ARGUMENTS_HH__
Arguments::Data::Data
Data()
Definition:
arguments.hh:51
MipsISA::index
Bitfield< 30, 0 > index
Definition:
pra_constants.hh:46
Arguments
Definition:
arguments.hh:40
Arguments::getThreadContext
ThreadContext * getThreadContext() const
Definition:
arguments.hh:71
Arguments::operator[]
Arguments operator[](int index)
Definition:
arguments.hh:125
Arguments::Data::~Data
~Data()
Definition:
arguments.cc:36
ThreadContext::getVirtProxy
virtual PortProxy & getVirtProxy()=0
Arguments::number
int number
Definition:
arguments.hh:44
Arguments::~Arguments
~Arguments()
Definition:
arguments.hh:69
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition:
thread_context.hh:93
Data
ArmISA::n
Bitfield< 31 > n
Definition:
miscregs_types.hh:452
Arguments::operator++
Arguments operator++(int)
Definition:
arguments.hh:93
Arguments::Arguments
Arguments(const Arguments &args)
Definition:
arguments.hh:67
Arguments::Data::alloc
char * alloc(size_t size)
Definition:
arguments.cc:45
Arguments::Arguments
Arguments(ThreadContext *ctx, int n=0)
Definition:
arguments.hh:64
ArmISA::d
Bitfield< 9 > d
Definition:
miscregs_types.hh:63
Arguments::operator--
Arguments operator--(int)
Definition:
arguments.hh:106
Arguments::data
std::shared_ptr< Data > data
Definition:
arguments.hh:61
std::list
STL list class.
Definition:
stl.hh:54
PortProxy::readBlob
void readBlob(Addr addr, void *p, int size) const
Higher level interfaces based on the above.
Definition:
port_proxy.hh:179
Arguments::operator-=
const Arguments & operator-=(int index)
Definition:
arguments.hh:119
PortProxy::readString
void readString(std::string &str, Addr addr) const
Same as tryReadString, but insists on success.
Definition:
port_proxy.hh:257
thread_context.hh
Arguments::operator--
Arguments & operator--()
Definition:
arguments.hh:100
Arguments::Data::data
std::list< char * > data
Definition:
arguments.hh:55
fs_translating_port_proxy.hh
TranslatingPortProxy Object Declaration for FS.
Arguments::operator=
const Arguments & operator=(const Arguments &args)
Definition:
arguments.hh:73
Arguments::operator!
bool operator!()
Definition:
arguments.hh:83
Arguments::operator+=
const Arguments & operator+=(int index)
Definition:
arguments.hh:113
ArmISA::fp
Bitfield< 19, 16 > fp
Definition:
miscregs_types.hh:175
Arguments::tc
ThreadContext * tc
Definition:
arguments.hh:43
Arguments::getArg
uint64_t getArg(uint16_t size=(uint16_t)(-1), bool fp=false)
Definition:
arguments.cc:53
Arguments::operator++
Arguments & operator++()
Definition:
arguments.hh:87
Generated on Fri Feb 28 2020 16:27:02 for gem5 by
doxygen
1.8.13