clang: Fix recently introduced clang compilation errors
This patch makes the code compile with clang 2.9 and 3.0 again by making two very minor changes. Firt, it maintains a strict typing in the forward declaration of the BaseCPUParams. Second, it adds a FullSystemInt flag of the type unsigned int next to the boolean FullSystem flag. The FullSystemInt variable can be used in decode-statements (expands to switch statements) in the instruction decoder.
This commit is contained in:
parent
a444a6f8d6
commit
adb8621031
7 changed files with 23 additions and 9 deletions
|
@ -805,14 +805,14 @@ decode OPCODE default Unknown::unknown() {
|
||||||
0x4400: wmb({{ }}, IsWriteBarrier, MemWriteOp);
|
0x4400: wmb({{ }}, IsWriteBarrier, MemWriteOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
0xe000: decode FullSystem {
|
0xe000: decode FullSystemInt {
|
||||||
0: FailUnimpl::rc_se();
|
0: FailUnimpl::rc_se();
|
||||||
default: BasicOperate::rc({{
|
default: BasicOperate::rc({{
|
||||||
Ra = IntrFlag;
|
Ra = IntrFlag;
|
||||||
IntrFlag = 0;
|
IntrFlag = 0;
|
||||||
}}, IsNonSpeculative, IsUnverifiable);
|
}}, IsNonSpeculative, IsUnverifiable);
|
||||||
}
|
}
|
||||||
0xf000: decode FullSystem {
|
0xf000: decode FullSystemInt {
|
||||||
0: FailUnimpl::rs_se();
|
0: FailUnimpl::rs_se();
|
||||||
default: BasicOperate::rs({{
|
default: BasicOperate::rs({{
|
||||||
Ra = IntrFlag;
|
Ra = IntrFlag;
|
||||||
|
@ -821,7 +821,7 @@ decode OPCODE default Unknown::unknown() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
0x00: decode FullSystem {
|
0x00: decode FullSystemInt {
|
||||||
0: decode PALFUNC {
|
0: decode PALFUNC {
|
||||||
format EmulatedCallPal {
|
format EmulatedCallPal {
|
||||||
0x00: halt ({{
|
0x00: halt ({{
|
||||||
|
|
|
@ -163,7 +163,7 @@ decode OPCODE_HI default Unknown::unknown() {
|
||||||
format BasicOp {
|
format BasicOp {
|
||||||
0x2: movz({{ Rd = (Rt == 0) ? Rs : Rd; }});
|
0x2: movz({{ Rd = (Rt == 0) ? Rs : Rd; }});
|
||||||
0x3: movn({{ Rd = (Rt != 0) ? Rs : Rd; }});
|
0x3: movn({{ Rd = (Rt != 0) ? Rs : Rd; }});
|
||||||
0x4: decode FullSystem {
|
0x4: decode FullSystemInt {
|
||||||
0: syscall_se({{ xc->syscall(R2); }},
|
0: syscall_se({{ xc->syscall(R2); }},
|
||||||
IsSerializeAfter, IsNonSpeculative);
|
IsSerializeAfter, IsNonSpeculative);
|
||||||
default: syscall({{ fault = new SystemCallFault(); }});
|
default: syscall({{ fault = new SystemCallFault(); }});
|
||||||
|
@ -2431,7 +2431,7 @@ decode OPCODE_HI default Unknown::unknown() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
0x3: decode OP default FailUnimpl::rdhwr() {
|
0x3: decode OP default FailUnimpl::rdhwr() {
|
||||||
0x0: decode FullSystem {
|
0x0: decode FullSystemInt {
|
||||||
0: decode RD {
|
0: decode RD {
|
||||||
29: BasicOp::rdhwr_se({{ Rt = TpValue; }});
|
29: BasicOp::rdhwr_se({{ Rt = TpValue; }});
|
||||||
}
|
}
|
||||||
|
|
|
@ -394,7 +394,7 @@
|
||||||
default: Inst::RET_FAR();
|
default: Inst::RET_FAR();
|
||||||
}
|
}
|
||||||
0x4: int3();
|
0x4: int3();
|
||||||
0x5: decode FullSystem default int_Ib() {
|
0x5: decode FullSystemInt default int_Ib() {
|
||||||
0: decode IMMEDIATE {
|
0: decode IMMEDIATE {
|
||||||
// Really only the LSB matters, but the predecoder
|
// Really only the LSB matters, but the predecoder
|
||||||
// will sign extend it, and there's no easy way to
|
// will sign extend it, and there's no easy way to
|
||||||
|
|
|
@ -216,7 +216,7 @@
|
||||||
default: Inst::UD2();
|
default: Inst::UD2();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
0x05: decode FullSystem {
|
0x05: decode FullSystemInt {
|
||||||
0: SyscallInst::syscall('xc->syscall(Rax)',
|
0: SyscallInst::syscall('xc->syscall(Rax)',
|
||||||
IsSyscall, IsNonSpeculative, IsSerializeAfter);
|
IsSyscall, IsNonSpeculative, IsSerializeAfter);
|
||||||
default: decode MODE_MODE {
|
default: decode MODE_MODE {
|
||||||
|
@ -398,7 +398,7 @@
|
||||||
0x1: Inst::RDTSC();
|
0x1: Inst::RDTSC();
|
||||||
0x2: Inst::RDMSR();
|
0x2: Inst::RDMSR();
|
||||||
0x3: rdpmc();
|
0x3: rdpmc();
|
||||||
0x4: decode FullSystem {
|
0x4: decode FullSystemInt {
|
||||||
0: SyscallInst::sysenter('xc->syscall(Rax)',
|
0: SyscallInst::sysenter('xc->syscall(Rax)',
|
||||||
IsSyscall, IsNonSpeculative, IsSerializeAfter);
|
IsSyscall, IsNonSpeculative, IsSerializeAfter);
|
||||||
default: sysenter();
|
default: sysenter();
|
||||||
|
|
|
@ -58,7 +58,7 @@
|
||||||
#include "sim/full_system.hh"
|
#include "sim/full_system.hh"
|
||||||
#include "sim/insttracer.hh"
|
#include "sim/insttracer.hh"
|
||||||
|
|
||||||
class BaseCPUParams;
|
struct BaseCPUParams;
|
||||||
class BranchPred;
|
class BranchPred;
|
||||||
class CheckerCPU;
|
class CheckerCPU;
|
||||||
class ThreadContext;
|
class ThreadContext;
|
||||||
|
|
|
@ -31,6 +31,18 @@
|
||||||
#ifndef __SIM_FULL_SYSTEM_HH__
|
#ifndef __SIM_FULL_SYSTEM_HH__
|
||||||
#define __SIM_FULL_SYSTEM_HH__
|
#define __SIM_FULL_SYSTEM_HH__
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The FullSystem variable can be used to determine the current mode
|
||||||
|
* of simulation.
|
||||||
|
*/
|
||||||
extern bool FullSystem;
|
extern bool FullSystem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In addition to the boolean flag we make use of an unsigned int
|
||||||
|
* since the CPU instruction decoder makes use of the variable in
|
||||||
|
* switch statements. A value of 0 signifies syscall emulation, and
|
||||||
|
* any other value full system.
|
||||||
|
*/
|
||||||
|
extern unsigned int FullSystemInt;
|
||||||
|
|
||||||
#endif // __SIM_FULL_SYSTEM_HH__
|
#endif // __SIM_FULL_SYSTEM_HH__
|
||||||
|
|
|
@ -125,6 +125,7 @@ Root::loadState(Checkpoint *cp)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FullSystem;
|
bool FullSystem;
|
||||||
|
unsigned int FullSystemInt;
|
||||||
|
|
||||||
Root *
|
Root *
|
||||||
RootParams::create()
|
RootParams::create()
|
||||||
|
@ -136,6 +137,7 @@ RootParams::create()
|
||||||
created = true;
|
created = true;
|
||||||
|
|
||||||
FullSystem = full_system;
|
FullSystem = full_system;
|
||||||
|
FullSystemInt = full_system ? 1 : 0;
|
||||||
|
|
||||||
return new Root(this);
|
return new Root(this);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue