aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGavin Romig-Koch <gavin@redhat.com>1997-09-20 18:22:22 +0000
committerGavin Romig-Koch <gavin@redhat.com>1997-09-20 18:22:22 +0000
commitc476ac55601cb83d48fe31e0b075ac8c8ee2cbc5 (patch)
treefe3b4fb9f8e0200104233c12eb63e69b197ea9d4
parent20b32dc554f8f0a728a7f695533ca5f05f54f165 (diff)
downloadgdb-c476ac55601cb83d48fe31e0b075ac8c8ee2cbc5.zip
gdb-c476ac55601cb83d48fe31e0b075ac8c8ee2cbc5.tar.gz
gdb-c476ac55601cb83d48fe31e0b075ac8c8ee2cbc5.tar.bz2
Add handling for 3900's SDBBP, DERET, and RFE insns.
* gencode.c (SDBBP,DERET): Added (3900) insns. (RFE): Turn on for 3900. * interp.c (DebugBreakPoint,DEPC,Debug,Debug_*): Added. (dsstate): Made global. (SUBTARGET_R3900): Added. (CANCELDELAYSLOT): New. (SignalException): Ignore SystemCall rather than ignore and terminate. Add DebugBreakPoint handling. (decode_coproc): New insns RFE, DERET; and new registers Debug and DEPC protected by SUBTARGET_R3900. (sim_engine_run): Use CANCELDELAYSLOT rather than clearing bits explicitly. * Makefile.in,configure.in: Add mips subtarget option. * configure: Update.
-rw-r--r--sim/mips/configure.in8
-rw-r--r--sim/mips/gencode.c14
2 files changed, 15 insertions, 7 deletions
diff --git a/sim/mips/configure.in b/sim/mips/configure.in
index 1ffee3c..a417a48 100644
--- a/sim/mips/configure.in
+++ b/sim/mips/configure.in
@@ -27,6 +27,14 @@ case "${target}" in
esac
AC_SUBST(SIMCONF)
+case "${target}" in
+# start-sanitize-tx19
+ mipstx19*-*-*) SIM_SUBTARGET="-DSUBTARGET_R3900=1";;
+# end-sanitize-tx19
+ *) SIM_SUBTARGET="";;
+esac
+AC_SUBST(SIM_SUBTARGET)
+
AC_CHECK_HEADERS(string.h strings.h stdlib.h stdlib.h)
AC_CHECK_LIB(m, fabs)
AC_CHECK_FUNCS(aint anint sqrt)
diff --git a/sim/mips/gencode.c b/sim/mips/gencode.c
index 2f8e60e..7f0269f 100644
--- a/sim/mips/gencode.c
+++ b/sim/mips/gencode.c
@@ -290,6 +290,7 @@ typedef enum {
SHIFT, /* perform a logical or arithmetic shift */
TRAP, /* system exception generation */
BREAK, /* system breakpoint exception generation */
+ SDBBP, /* software debug breakpoint exception generation */
SYSCALL, /* system exception generation */
SYNC, /* system cache control */
DECODE, /* co-processor instruction */
@@ -823,6 +824,7 @@ struct instruction MIPS_DECODE[] = {
{"SCD", 3,"111100sssssgggggeeeeeeeeeeeeeeee",NORMAL, STORE, (DOUBLEWORD | ATOMIC)},
{"SD", 3,"111111sssssgggggeeeeeeeeeeeeeeee",NORMAL, STORE, (DOUBLEWORD)},
{"SDC1", 2,"111101sssssttttteeeeeeeeeeeeeeee",NORMAL, STORE, (DOUBLEWORD | COPROC)},
+ {"SDBBP", T3,"000000????????????????????001110",SPECIAL,SDBBP, (NOARG)},
{"SDC2", 2,"111110sssssttttteeeeeeeeeeeeeeee",NORMAL, STORE, (DOUBLEWORD | COPROC)},
{"SDL", 3,"101100sssssgggggyyyyyyyyyyyyyyyy",NORMAL, STORE, (DOUBLEWORD | LEFT)},
{"SDR", 3,"101101sssssgggggyyyyyyyyyyyyyyyy",NORMAL, STORE, (DOUBLEWORD | RIGHT)},
@@ -941,6 +943,7 @@ static const struct instruction MIPS16_DECODE[] = {
{"NOT", 1, "11101dddyyy01111Z", RR, OR, NOT },
{"OR", 1, "11101wwwyyy01101", RR, OR, NONE },
{"SB", 1, "11000xxxyyy55555", RRI, STORE, BYTE },
+{"SDBBP", T3, "11100??????00001", RR, SDBBP, NOARG },
{"SD", 3, "01111xxxyyyDDDDD", RRI, STORE, DOUBLEWORD },
{"SDSP", 3, "11111001yyyDDDDDs", RI64, STORE, DOUBLEWORD },
{"SDRASP", 3, "11111010CCCCCCCCsQ", I64, STORE, DOUBLEWORD },
@@ -2418,6 +2421,10 @@ build_instruction (doisa, features, mips16, insn)
printf(" SignalException(BreakPoint,instruction);\n");
break ;
+ case SDBBP:
+ printf(" SignalException(DebugBreakPoint,instruction);\n");
+ break ;
+
case TRAP:
{
int boolNOT = (insn->flags & NOT);
@@ -4493,10 +4500,3 @@ my_strtoul(nptr, endptr, base)
/*---------------------------------------------------------------------------*/
/*> EOF gencode.c <*/
-
-
-
-
-
-
-