summaryrefslogtreecommitdiff
path: root/arch/sparc/isa
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2006-03-15 23:38:55 -0500
committerKorey Sewell <ksewell@umich.edu>2006-03-15 23:38:55 -0500
commit77a2f97c3590d7d51ffc5b447546c7c70894bdbd (patch)
tree3463e457b10da0cea34cf20e914b2b51dc329d28 /arch/sparc/isa
parente2b558112b408847a1423e5dd12db59e81260c84 (diff)
parent7359e2df01fde9ea34a0ba661750a455e26bcacd (diff)
downloadgem5-77a2f97c3590d7d51ffc5b447546c7c70894bdbd.tar.xz
Merge zizzer:/bk/newmem
into zazzer.eecs.umich.edu:/.automount/zooks/y/ksewell/research/m5-sim/newmem-mips --HG-- extra : convert_revision : 9bdde9b5bd3049744451eda1134f080b7c4b1b59
Diffstat (limited to 'arch/sparc/isa')
-rw-r--r--arch/sparc/isa/bitfields.isa2
-rw-r--r--arch/sparc/isa/decoder.isa18
2 files changed, 17 insertions, 3 deletions
diff --git a/arch/sparc/isa/bitfields.isa b/arch/sparc/isa/bitfields.isa
index b0ac57575..237f0fa64 100644
--- a/arch/sparc/isa/bitfields.isa
+++ b/arch/sparc/isa/bitfields.isa
@@ -46,5 +46,5 @@ def bitfield SHCNT64 <5:0>;
def bitfield SIMM10 <9:0>;
def bitfield SIMM11 <10:0>;
def bitfield SIMM13 <12:0>;
-def bitfield SW_TRAP <6:0>;
+def bitfield SW_TRAP <7:0>;
def bitfield X <12>;
diff --git a/arch/sparc/isa/decoder.isa b/arch/sparc/isa/decoder.isa
index eaf3aab3b..716653d84 100644
--- a/arch/sparc/isa/decoder.isa
+++ b/arch/sparc/isa/decoder.isa
@@ -532,12 +532,26 @@ decode OP default Trap::unknown({{IllegalInstruction}}) {
case 1: case 3:
throw illegal_instruction;
case 0:
+#if FULL_SYSTEM
+ throw trap_instruction;
+#else
if(passesCondition(xc->regs.MiscRegs.ccrFields.icc, machInst<25:28>))
- throw trap_instruction;
+ // At least glibc only uses trap 0,
+ // solaris/sunos may use others
+ assert((I ? Rs1 + Rs2 : Rs1 + SW_TRAP) == 0);
+ xc->syscall();
+#endif
break;
case 2:
+#if FULL_SYSTEM
+ throw trap_instruction;
+#else
if(passesCondition(xc->regs.MiscRegs.ccrFields.xcc, machInst<25:28>))
- throw trap_instruction;
+ // At least glibc only uses trap 0,
+ // solaris/sunos may use others
+ assert((I ? Rs1 + Rs2 : Rs1 + SW_TRAP) == 0);
+ xc->syscall();
+#endif
break;
}
}}); //Tcc