From: Jeff Law Date: Sun, 18 May 1997 22:57:49 +0000 (+0000) Subject: * interp.c (load_mem_big): Remove function. It's now a macro X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b07a1e78c5e0d82d8cf993da497b2afc9cb94a86;p=binutils-gdb.git * 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. --- diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog index 50db9743344..a69a3be1838 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 1a14039e1e2..cf42f2392f2 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];