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:
Andreas Hansson 2012-03-19 06:35:04 -04:00
parent a444a6f8d6
commit adb8621031
7 changed files with 23 additions and 9 deletions

View file

@ -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 ({{

View file

@ -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; }});
} }

View file

@ -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

View file

@ -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();

View file

@ -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;

View file

@ -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__

View file

@ -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);
} }