* 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.
This commit is contained in:
Jeff Law 1997-05-18 22:57:49 +00:00
parent 63aa80ff51
commit b07a1e78c5
2 changed files with 34 additions and 26 deletions

View File

@ -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

View File

@ -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];