diff options
author | Jeff Law <law@redhat.com> | 1997-05-18 22:57:49 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 1997-05-18 22:57:49 +0000 |
commit | b07a1e78c5e0d82d8cf993da497b2afc9cb94a86 (patch) | |
tree | efb62dddb60b69a178ce1464c57cb87dee5494ef /sim/mn10300 | |
parent | 63aa80ff5151ee867663272a38ac3d7556408fcf (diff) | |
download | gdb-b07a1e78c5e0d82d8cf993da497b2afc9cb94a86.zip gdb-b07a1e78c5e0d82d8cf993da497b2afc9cb94a86.tar.gz gdb-b07a1e78c5e0d82d8cf993da497b2afc9cb94a86.tar.bz2 |
* interp.c (load_mem_big): Remove function. It's now a macro
defined elsewhere.
(compare_simops): New function.
(sim_open): Sort the Simops table before inserting entries
into the hash table.
* mn10300_sim.h: Remove unused #defines.
(load_mem_big): Define.
Another 20% so performance improvement for the mn10300 simulator.
Diffstat (limited to 'sim/mn10300')
-rw-r--r-- | sim/mn10300/ChangeLog | 10 | ||||
-rw-r--r-- | sim/mn10300/interp.c | 50 |
2 files changed, 34 insertions, 26 deletions
diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog index 50db974..a69a3be 100644 --- a/sim/mn10300/ChangeLog +++ b/sim/mn10300/ChangeLog @@ -1,3 +1,13 @@ +Sun May 18 16:46:31 1997 Jeffrey A Law (law@cygnus.com) + + * interp.c (load_mem_big): Remove function. It's now a macro + defined elsewhere. + (compare_simops): New function. + (sim_open): Sort the Simops table before inserting entries + into the hash table. + * mn10300_sim.h: Remove unused #defines. + (load_mem_big): Define. + Fri May 16 16:36:17 1997 Jeffrey A Law (law@cygnus.com) * interp.c (load_mem): If we get a load from an out of range diff --git a/sim/mn10300/interp.c b/sim/mn10300/interp.c index 1a14039..cf42f23 100644 --- a/sim/mn10300/interp.c +++ b/sim/mn10300/interp.c @@ -234,32 +234,6 @@ put_word (addr, data) a[3] = (data >> 24) & 0xff; } - -uint32 -load_mem_big (addr, len) - SIM_ADDR addr; - int len; -{ - uint8 *p = addr + State.mem; - - if (addr > max_mem) - abort (); - - switch (len) - { - case 1: - return p[0]; - case 2: - return p[0] << 8 | p[1]; - case 3: - return p[0] << 16 | p[1] << 8 | p[2]; - case 4: - return p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]; - default: - abort (); - } -} - uint32 load_mem (addr, len) SIM_ADDR addr; @@ -357,6 +331,22 @@ sim_write (sd, addr, buffer, size) return size; } +/* Compare two opcode table entries for qsort. */ +static int +compare_simops (arg1, arg2) + const PTR arg1; + const PTR arg2; +{ + unsigned long code1 = ((struct simops *)arg1)->opcode; + unsigned long code2 = ((struct simops *)arg2)->opcode; + + if (code1 < code2) + return -1; + if (code2 < code1) + return 1; + return 0; +} + SIM_DESC sim_open (kind,argv) SIM_OPEN_KIND kind; @@ -365,6 +355,14 @@ sim_open (kind,argv) struct simops *s; struct hash_entry *h; char **p; + int i; + + /* Sort the opcode array from smallest opcode to largest. + This will generally improve simulator performance as the smaller + opcodes are generally preferred to the larger opcodes. */ + for (i = 0, s = Simops; s->func; s++, i++) + ; + qsort (Simops, i, sizeof (Simops[0]), compare_simops); sim_kind = kind; myname = argv[0]; |