diff options
author | Andrew Schultz <alschult@umich.edu> | 2004-02-09 17:50:47 -0500 |
---|---|---|
committer | Andrew Schultz <alschult@umich.edu> | 2004-02-09 17:50:47 -0500 |
commit | eac2d6a66863dcd7d5129ee5112ea49248f9efa8 (patch) | |
tree | d59508dd612d82b80fef69ded188e2704e074d40 /arch/alpha | |
parent | 48bb27be728db65ad521eb5bda8cb3411dfddc43 (diff) | |
parent | da8a7022126eef87d4007b7135aa89c559eb6747 (diff) | |
download | gem5-eac2d6a66863dcd7d5129ee5112ea49248f9efa8.tar.xz |
Merge linux tree with head
arch/alpha/alpha_memory.cc:
dev/alpha_console.cc:
dev/alpha_console.hh:
Merge
--HG--
extra : convert_revision : 3233648f204338ab3f102ff117754dce955dcc37
Diffstat (limited to 'arch/alpha')
-rw-r--r-- | arch/alpha/alpha_memory.cc | 3 | ||||
-rw-r--r-- | arch/alpha/isa_desc | 35 |
2 files changed, 28 insertions, 10 deletions
diff --git a/arch/alpha/alpha_memory.cc b/arch/alpha/alpha_memory.cc index d68c99b2c..00e97250f 100644 --- a/arch/alpha/alpha_memory.cc +++ b/arch/alpha/alpha_memory.cc @@ -97,7 +97,8 @@ AlphaTlb::checkCacheability(MemReqPtr &req) break; default: - panic("IPR memory space not implemented! PA=%x\n", req->paddr); + panic("IPR memory space not implemented! PA=%x\n", + req->paddr); } } } else { diff --git a/arch/alpha/isa_desc b/arch/alpha/isa_desc index 51bce65c2..75b2f4138 100644 --- a/arch/alpha/isa_desc +++ b/arch/alpha/isa_desc @@ -1225,7 +1225,7 @@ declare {{ { } - Addr branchTarget(Addr branchPC) + Addr branchTarget(Addr branchPC) const { return branchPC + 4 + disp; } @@ -1287,7 +1287,7 @@ declare {{ { } - Addr branchTarget(ExecContext *xc) + Addr branchTarget(ExecContext *xc) const { Addr NPC = xc->readPC() + 4; uint64_t Rb = xc->readIntReg(_srcRegIdx[0]); @@ -2330,10 +2330,6 @@ decode OPCODE default Unknown::unknown() { // miscellaneous mem-format ops 0x18: decode MEMFUNC { format WarnUnimpl { - 0x0000: trapb(); - 0x0400: excb(); - 0x4000: mb(); - 0x4400: wmb(); 0x8000: fetch(); 0xa000: fetch_m(); 0xe800: ecb(); @@ -2347,6 +2343,27 @@ decode OPCODE default Unknown::unknown() { format BasicOperate { 0xc000: rpcc({{ Ra = curTick; }}); + + // All of the barrier instructions below do nothing in + // their execute() methods (hence the empty code blocks). + // All of their functionality is hard-coded in the + // pipeline based on the flags IsSerializing, + // IsMemBarrier, and IsWriteBarrier. In the current + // detailed CPU model, the execute() function only gets + // called at fetch, so there's no way to generate pipeline + // behavior at any other stage. Once we go to an + // exec-in-exec CPU model we should be able to get rid of + // these flags and implement this behavior via the + // execute() methods. + + // trapb is just a barrier on integer traps, where excb is + // a barrier on integer and FP traps. "EXCB is thus a + // superset of TRAPB." (Alpha ARM, Sec 4.11.4) We treat + // them the same though. + 0x0000: trapb({{ }}, IsSerializing, No_OpClass); + 0x0400: excb({{ }}, IsSerializing, No_OpClass); + 0x4000: mb({{ }}, IsMemBarrier, RdPort); + 0x4400: wmb({{ }}, IsWriteBarrier, WrPort); } #ifdef FULL_SYSTEM @@ -2356,13 +2373,13 @@ decode OPCODE default Unknown::unknown() { if (!xc->misspeculating()) { xc->regs.intrflag = 0; } - }}, No_OpClass); + }}); 0xf000: rs({{ Ra = xc->regs.intrflag; if (!xc->misspeculating()) { xc->regs.intrflag = 1; } - }}, No_OpClass); + }}); } #else format FailUnimpl { @@ -2476,7 +2493,7 @@ decode OPCODE default Unknown::unknown() { if (!xc->misspeculating()) AlphaPseudo::m5exit(xc); }}, No_OpClass); - 0x30: initparam({{ Ra = xc->cpu->system->init_param; }}); + 0x30: initparam({{ Ra = cpu->system->init_param; }}); 0x40: resetstats({{ if (!xc->misspeculating()) AlphaPseudo::resetstats(xc); |