gem5
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
arch
alpha
utility.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
* Steve Reinhardt
30
*/
31
32
#ifndef __ARCH_ALPHA_UTILITY_HH__
33
#define __ARCH_ALPHA_UTILITY_HH__
34
35
#include "
arch/alpha/isa_traits.hh
"
36
#include "
arch/alpha/registers.hh
"
37
#include "
arch/alpha/types.hh
"
38
#include "
base/misc.hh
"
39
#include "
cpu/static_inst.hh
"
40
#include "
cpu/thread_context.hh
"
41
#include "
arch/alpha/ev5.hh
"
42
43
namespace
AlphaISA {
44
45
inline
PCState
46
buildRetPC
(
const
PCState
&curPC,
const
PCState
&callPC)
47
{
48
PCState
retPC = callPC;
49
retPC.
advance
();
50
return
retPC;
51
}
52
53
uint64_t
getArgument
(
ThreadContext
*tc,
int
&number, uint16_t
size
,
bool
fp
);
54
55
inline
bool
56
inUserMode
(
ThreadContext
*tc)
57
{
58
return
(tc->
readMiscRegNoEffect
(
IPR_DTB_CM
) & 0x18) != 0;
59
}
60
65
template
<
class
TC>
66
void
zeroRegisters
(TC *tc);
67
68
// Alpha IPR register accessors
69
inline
bool
PcPAL
(
Addr
addr
) {
return
addr & 0x3; }
70
inline
void
startupCPU
(
ThreadContext
*tc,
int
cpuId)
71
{ tc->
activate
(); }
72
74
//
75
// Translation stuff
76
//
77
78
inline
Addr
PteAddr
(
Addr
a
) {
return
(a &
PteMask
) <<
PteShift
; }
79
80
// User Virtual
81
inline
bool
IsUSeg
(
Addr
a
) { assert(
USegBase
== 0);
return
a <=
USegEnd
; }
82
83
// Kernel Direct Mapped
84
inline
bool
IsK0Seg
(
Addr
a
) {
return
K0SegBase
<= a && a <=
K0SegEnd
; }
85
inline
Addr
K0Seg2Phys
(
Addr
addr
) {
return
addr & ~
K0SegBase
; }
86
87
// Kernel Virtual
88
inline
bool
IsK1Seg
(
Addr
a
) {
return
K1SegBase
<= a && a <=
K1SegEnd
; }
89
90
inline
Addr
91
TruncPage
(
Addr
addr
)
92
{
return
addr & ~(
PageBytes
- 1); }
93
94
inline
Addr
95
RoundPage
(
Addr
addr
)
96
{
return
(addr +
PageBytes
- 1) & ~(
PageBytes
- 1); }
97
98
void
initIPRs
(
ThreadContext
*tc,
int
cpuId);
99
void
initCPU
(
ThreadContext
*tc,
int
cpuId);
100
101
void
copyRegs
(
ThreadContext
*src,
ThreadContext
*dest);
102
103
void
copyMiscRegs
(
ThreadContext
*src,
ThreadContext
*dest);
104
105
void
skipFunction
(
ThreadContext
*tc);
106
107
inline
void
108
advancePC
(
PCState
&
pc
,
const
StaticInstPtr
&inst)
109
{
110
pc.
advance
();
111
}
112
113
inline
uint64_t
114
getExecutingAsid
(
ThreadContext
*tc)
115
{
116
return
DTB_ASN_ASN
(tc->
readMiscRegNoEffect
(
IPR_DTB_ASN
));
117
}
118
119
}
// namespace AlphaISA
120
121
#endif // __ARCH_ALPHA_UTILITY_HH__
AlphaISA::PcPAL
bool PcPAL(Addr addr)
Definition:
utility.hh:69
AlphaISA::K1SegEnd
const Addr K1SegEnd
Definition:
isa_traits.hh:76
AlphaISA::DTB_ASN_ASN
int DTB_ASN_ASN(uint64_t reg)
Definition:
ev5.hh:70
AlphaISA::USegBase
const Addr USegBase
Definition:
isa_traits.hh:67
AlphaISA::K1SegBase
const Addr K1SegBase
Definition:
isa_traits.hh:75
registers.hh
AlphaISA::IsUSeg
bool IsUSeg(Addr a)
Definition:
utility.hh:81
ArmISA::a
Bitfield< 8 > a
Definition:
miscregs.hh:1377
AlphaISA::USegEnd
const Addr USegEnd
Definition:
isa_traits.hh:68
addr
ip6_addr_t addr
Definition:
inet.hh:335
MipsISA::fp
Bitfield< 0 > fp
Definition:
pra_constants.hh:246
ThreadContext::readMiscRegNoEffect
virtual MiscReg readMiscRegNoEffect(int misc_reg) const =0
AlphaISA::getArgument
uint64_t getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
Definition:
utility.cc:41
AlphaISA::PteShift
const Addr PteShift
Definition:
isa_traits.hh:61
thread_context.hh
RefCountingPtr< StaticInst >
ThreadContext
ThreadContext is the external interface to all thread state for anything outside of the CPU...
Definition:
thread_context.hh:93
types.hh
AlphaISA::K0SegEnd
const Addr K0SegEnd
Definition:
isa_traits.hh:72
misc.hh
GenericISA::SimplePCState::advance
void advance()
Definition:
types.hh:168
AlphaISA::startupCPU
void startupCPU(ThreadContext *tc, int cpuId)
Definition:
utility.hh:70
ev5.hh
AlphaISA::PteAddr
Addr PteAddr(Addr a)
Definition:
utility.hh:78
static_inst.hh
AlphaISA::initCPU
void initCPU(ThreadContext *tc, int cpuId)
Definition:
ev5.cc:51
AlphaISA::skipFunction
void skipFunction(ThreadContext *tc)
Definition:
utility.cc:101
AlphaISA::PteMask
const Addr PteMask
Definition:
isa_traits.hh:64
AlphaISA::copyMiscRegs
void copyMiscRegs(ThreadContext *src, ThreadContext *dest)
Definition:
utility.cc:86
AlphaISA::zeroRegisters
void zeroRegisters(CPU *cpu)
Definition:
ev5.cc:67
ThreadContext::activate
virtual void activate()=0
Set the status to Active.
AlphaISA::TruncPage
Addr TruncPage(Addr addr)
Definition:
utility.hh:91
Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition:
types.hh:142
AlphaISA::inUserMode
bool inUserMode(ThreadContext *tc)
Definition:
utility.hh:56
AlphaISA::advancePC
void advancePC(PCState &pc, const StaticInstPtr &inst)
Definition:
utility.hh:108
AlphaISA::buildRetPC
PCState buildRetPC(const PCState &curPC, const PCState &callPC)
Definition:
utility.hh:46
AlphaISA::getExecutingAsid
uint64_t getExecutingAsid(ThreadContext *tc)
Definition:
utility.hh:114
AlphaISA::PageBytes
const Addr PageBytes
Definition:
isa_traits.hh:52
AlphaISA::initIPRs
void initIPRs(ThreadContext *tc, int cpuId)
Definition:
ev5.cc:81
GenericISA::SimplePCState
Definition:
types.hh:131
X86ISA::size
int size()
Definition:
pagetable.hh:146
AlphaISA::PCState
GenericISA::SimplePCState< MachInst > PCState
Definition:
types.hh:43
AlphaISA::IsK0Seg
bool IsK0Seg(Addr a)
Definition:
utility.hh:84
AlphaISA::copyRegs
void copyRegs(ThreadContext *src, ThreadContext *dest)
Definition:
utility.cc:65
AlphaISA::IPR_DTB_CM
Definition:
ipr.hh:198
pc
IntReg pc
Definition:
remote_gdb.hh:91
AlphaISA::IsK1Seg
bool IsK1Seg(Addr a)
Definition:
utility.hh:88
AlphaISA::RoundPage
Addr RoundPage(Addr addr)
Definition:
utility.hh:95
AlphaISA::K0Seg2Phys
Addr K0Seg2Phys(Addr addr)
Definition:
utility.hh:85
isa_traits.hh
AlphaISA::IPR_DTB_ASN
Definition:
ipr.hh:197
AlphaISA::K0SegBase
const Addr K0SegBase
Definition:
isa_traits.hh:71
Generated on Fri Jun 9 2017 13:03:37 for gem5 by
doxygen
1.8.6