From 941100245a42cb730b23ff0f6889265e2e5f9e2f Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 11 May 2010 14:18:20 +0000 Subject: [PATCH] 2010-04-20 Tiemen Schut * erc32.c (sis_memory_write): Change prototype to const unsigned char *. * func.c (exec_cmd, event, advance_time, wait_for_irq): Use uint64 for counts. * interf.c (run_sim): Change icount to uint64_t. Use strtol directly. (sim_resume): Specify maximum run time as uint64. * sis.c (run_sim): Change icount to uint64_t. * sis.h: Define uint64 as uint64_t. Change various fields and prototypes to uint64 to support longer simulations. --- sim/erc32/ChangeLog | 11 +++++++++++ sim/erc32/erc32.c | 6 +++--- sim/erc32/func.c | 22 +++++++++++---------- sim/erc32/interf.c | 8 +++----- sim/erc32/sis.c | 2 +- sim/erc32/sis.h | 47 +++++++++++++++++++++++---------------------- 6 files changed, 54 insertions(+), 42 deletions(-) diff --git a/sim/erc32/ChangeLog b/sim/erc32/ChangeLog index d6f0cafca6f..1c304c50b63 100644 --- a/sim/erc32/ChangeLog +++ b/sim/erc32/ChangeLog @@ -1,3 +1,14 @@ +2010-04-20 Tiemen Schut + + * erc32.c (sis_memory_write): Change prototype to const unsigned char *. + * func.c (exec_cmd, event, advance_time, wait_for_irq): Use uint64 + for counts. + * interf.c (run_sim): Change icount to uint64_t. Use strtol directly. + (sim_resume): Specify maximum run time as uint64. + * sis.c (run_sim): Change icount to uint64_t. + * sis.h: Define uint64 as uint64_t. Change various fields and + prototypes to uint64 to support longer simulations. + 2010-04-14 Mike Frysinger * interp.c (sim_write): Add const to buf arg. diff --git a/sim/erc32/erc32.c b/sim/erc32/erc32.c index c79dfd63f6e..0e892736f27 100644 --- a/sim/erc32/erc32.c +++ b/sim/erc32/erc32.c @@ -1860,9 +1860,9 @@ get_mem_ptr(addr, size) int sis_memory_write(addr, data, length) - uint32 addr; - char *data; - uint32 length; + uint32 addr; + const unsigned char *data; + uint32 length; { char *mem; diff --git a/sim/erc32/func.c b/sim/erc32/func.c index bf898bba6cc..80fbbe1e48b 100644 --- a/sim/erc32/func.c +++ b/sim/erc32/func.c @@ -421,7 +421,7 @@ exec_cmd(sregs, cmd) } } else if (strncmp(cmd1, "cont", clen) == 0) { if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) { - stat = run_sim(sregs, -1, 0); + stat = run_sim(sregs, UINT64_MAX, 0); } else { stat = run_sim(sregs, VAL(cmd1), 0); } @@ -472,7 +472,7 @@ exec_cmd(sregs, cmd) if ((cmd2 = strtok(NULL, " \t\n\r")) != NULL) { stat = run_sim(sregs, VAL(cmd2), 0); } else { - stat = run_sim(sregs, -1, 0); + stat = run_sim(sregs, UINT64_MAX, 0); } daddr = sregs->pc; sim_halt(); @@ -544,7 +544,7 @@ exec_cmd(sregs, cmd) reset_all(); reset_stat(sregs); if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) { - stat = run_sim(sregs, -1, 0); + stat = run_sim(sregs, UINT64_MAX, 0); } else { stat = run_sim(sregs, VAL(cmd1), 0); } @@ -560,7 +560,7 @@ exec_cmd(sregs, cmd) sim_halt(); } else if (strncmp(cmd1, "tcont", clen) == 0) { sregs->tlimit = limcalc(sregs->freq); - stat = run_sim(sregs, -1, 0); + stat = run_sim(sregs, UINT64_MAX, 0); daddr = sregs->pc; sim_halt(); } else if (strncmp(cmd1, "tgo", clen) == 0) { @@ -573,7 +573,7 @@ exec_cmd(sregs, cmd) sregs->pc = len & ~3; sregs->npc = sregs->pc + 4; printf("resuming at 0x%08x\n",sregs->pc); - stat = run_sim(sregs, -1, 0); + stat = run_sim(sregs, UINT64_MAX, 0); daddr = sregs->pc; sim_halt(); } else if (strncmp(cmd1, "tlimit", clen) == 0) { @@ -583,7 +583,7 @@ exec_cmd(sregs, cmd) sregs->tlimit / sregs->freq / 1000); } else if (strncmp(cmd1, "tra", clen) == 0) { if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) { - stat = run_sim(sregs, -1, 1); + stat = run_sim(sregs, UINT64_MAX, 1); } else { stat = run_sim(sregs, VAL(cmd1), 1); } @@ -595,7 +595,7 @@ exec_cmd(sregs, cmd) reset_all(); reset_stat(sregs); sregs->tlimit = limcalc(sregs->freq); - stat = run_sim(sregs, -1, 0); + stat = run_sim(sregs, UINT64_MAX, 0); daddr = sregs->pc; sim_halt(); } else @@ -833,7 +833,7 @@ void event(cfunc, arg, delta) void (*cfunc) (); int32 arg; - uint32 delta; + uint64 delta; { struct evcell *ev1, *evins; @@ -900,7 +900,8 @@ advance_time(sregs) struct evcell *evrem; void (*cfunc) (); - uint32 arg, endtime; + uint32 arg; + uint64 endtime; #ifdef STAT sregs->fholdt += sregs->fhold; @@ -938,7 +939,8 @@ wait_for_irq() { struct evcell *evrem; void (*cfunc) (); - int32 arg, endtime; + int32 arg; + uint64 endtime; if (ebase.eq.nxt == NULL) printf("Warning: event queue empty - power-down mode not entered\n"); diff --git a/sim/erc32/interf.c b/sim/erc32/interf.c index c7ffa992cad..edba5347354 100644 --- a/sim/erc32/interf.c +++ b/sim/erc32/interf.c @@ -37,8 +37,6 @@ #define PSR_CWP 0x7 -#define VAL(x) strtol(x,(char **)NULL,0) - extern struct disassemble_info dinfo; extern struct pstate sregs; extern struct estate ebase; @@ -69,7 +67,7 @@ host_callback *sim_callback; int run_sim(sregs, icount, dis) struct pstate *sregs; - unsigned int icount; + uint64 icount; int dis; { int mexc, irq; @@ -234,7 +232,7 @@ sim_open (kind, callback, abfd, argv) } else if (strcmp(argv[stat], "-freq") == 0) { if ((stat + 1) < argc) { - freq = VAL(argv[++stat]); + freq = strtol(argv[++stat], (char **)NULL, 0); } } else { (*sim_callback->printf_filtered) (sim_callback, @@ -461,7 +459,7 @@ flush_windows () void sim_resume(SIM_DESC sd, int step, int siggnal) { - simstat = run_sim(&sregs, -1, 0); + simstat = run_sim(&sregs, UINT64_MAX, 0); if (sis_gdb_break) flush_windows (); } diff --git a/sim/erc32/sis.c b/sim/erc32/sis.c index 2cb75a62d50..2354df919f3 100644 --- a/sim/erc32/sis.c +++ b/sim/erc32/sis.c @@ -82,7 +82,7 @@ extern int era; int run_sim(sregs, icount, dis) struct pstate *sregs; - unsigned int icount; + uint64 icount; int dis; { int irq, mexc, deb, asi; diff --git a/sim/erc32/sis.h b/sim/erc32/sis.h index 5bdd7704e24..a3973f31444 100644 --- a/sim/erc32/sis.h +++ b/sim/erc32/sis.h @@ -23,6 +23,7 @@ #include "ansidecl.h" #include "gdb/callback.h" #include "gdb/remote-sim.h" +#include #include "end.h" @@ -52,8 +53,8 @@ typedef float float32; /* 32-bit float */ typedef double float64; /* 64-bit float */ /* FIXME: what about host compilers that don't support 64-bit ints? */ -typedef unsigned long long uint64; /* 64-bit unsigned int */ -typedef long long int64; /* 64-bit signed int */ +typedef uint64_t uint64; /* 64-bit unsigned int */ +typedef int64_t int64; /* 64-bit signed int */ struct pstate { @@ -108,22 +109,22 @@ struct pstate { float32 freq; /* Simulated processor frequency */ - uint32 tottime; - uint32 ninst; - uint32 fholdt; - uint32 holdt; - uint32 icntt; - uint32 finst; - uint32 simstart; - uint32 starttime; - uint32 tlimit; /* Simulation time limit */ - uint32 pwdtime; /* Cycles in power-down mode */ - uint32 nstore; /* Number of load instructions */ - uint32 nload; /* Number of store instructions */ - uint32 nannul; /* Number of annuled instructions */ - uint32 nbranch; /* Number of branch instructions */ + uint64 tottime; + uint64 ninst; + uint64 fholdt; + uint64 holdt; + uint64 icntt; + uint64 finst; + uint64 simstart; + uint64 starttime; + uint64 tlimit; /* Simulation time limit */ + uint64 pwdtime; /* Cycles in power-down mode */ + uint64 nstore; /* Number of load instructions */ + uint64 nload; /* Number of store instructions */ + uint64 nannul; /* Number of annuled instructions */ + uint64 nbranch; /* Number of branch instructions */ uint32 ildreg; /* Destination of last load instruction */ - uint32 ildtime; /* Last time point for load dependency */ + uint64 ildtime; /* Last time point for load dependency */ int rett_err; /* IU in jmpl/restore error state (Rev.0) */ int jmpltime; @@ -132,14 +133,14 @@ struct pstate { struct evcell { void (*cfunc) (); int32 arg; - uint32 time; + uint64 time; struct evcell *nxt; }; struct estate { struct evcell eq; struct evcell *freeq; - uint32 simtime; + uint64 simtime; }; struct irqcell { @@ -168,8 +169,8 @@ extern int memory_read PARAMS ((int32 asi, uint32 addr, uint32 *data, int32 sz, int32 *ws)); extern int memory_write PARAMS ((int32 asi, uint32 addr, uint32 *data, int32 sz, int32 *ws)); -extern int sis_memory_write PARAMS ((uint32 addr, char *data, - uint32 length)); +extern int sis_memory_write PARAMS ((uint32 addr, + const unsigned char *data, uint32 length)); extern int sis_memory_read PARAMS ((uint32 addr, char *data, uint32 length)); @@ -186,7 +187,7 @@ extern void init_signals PARAMS ((void)); struct disassemble_info; extern void dis_mem PARAMS ((uint32 addr, uint32 len, struct disassemble_info *info)); -extern void event PARAMS ((void (*cfunc) (), int32 arg, uint32 delta)); +extern void event PARAMS ((void (*cfunc) (), int32 arg, uint64 delta)); extern void set_int PARAMS ((int32 level, void (*callback) (), int32 arg)); extern void advance_time PARAMS ((struct pstate *sregs)); extern uint32 now PARAMS ((void)); @@ -205,7 +206,7 @@ extern void init_regs PARAMS ((struct pstate *sregs)); /* interf.c */ extern int run_sim PARAMS ((struct pstate *sregs, - unsigned int icount, int dis)); + uint64 icount, int dis)); /* float.c */ extern int get_accex PARAMS ((void)); -- 2.30.2