* interp.c (hash): Make this an inline function
when compiling with GCC. Simplify. * simpos.c: Explicitly include "sys/syscall.h". Remove some #if 0'd code. Enable more emulated syscalls. Checking in more stuff.
This commit is contained in:
parent
ca296aab0e
commit
9909e232c0
3 changed files with 43 additions and 44 deletions
|
@ -1,3 +1,14 @@
|
|||
Mon Sep 9 20:50:46 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* interp.c (hash): Make this an inline function
|
||||
when compiling with GCC. Simplify.
|
||||
* simpos.c: Explicitly include "sys/syscall.h". Remove
|
||||
some #if 0'd code. Enable more emulated syscalls.
|
||||
|
||||
Wed Sep 4 01:48:55 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* interp.c: Fix sign bit handling for add and sub instructions.
|
||||
|
||||
Tue Sep 3 10:20:30 1996 Jeffrey A Law (law@cygnus.com)
|
||||
|
||||
* gencode.c: Fix various indention & style problems.
|
||||
|
|
|
@ -6,6 +6,14 @@
|
|||
|
||||
#include "v850_sim.h"
|
||||
|
||||
#ifndef INLINE
|
||||
#ifdef __GNUC__
|
||||
#define INLINE inline
|
||||
#else
|
||||
#define INLINE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define MEM_SIZE 18 /* V850 memory size is 18 bits XXX */
|
||||
|
||||
host_callback *v850_callback;
|
||||
|
@ -14,6 +22,16 @@ host_callback *v850_callback;
|
|||
uint32 OP[4];
|
||||
|
||||
static struct hash_entry *lookup_hash PARAMS ((uint32 ins));
|
||||
static long hash PARAMS ((long));
|
||||
static void do_format_1_2 PARAMS ((uint32));
|
||||
static void do_format_3 PARAMS ((uint32));
|
||||
static void do_format_4 PARAMS ((uint32));
|
||||
static void do_format_5 PARAMS ((uint32));
|
||||
static void do_format_6 PARAMS ((uint32));
|
||||
static void do_format_7 PARAMS ((uint32));
|
||||
static void do_format_8 PARAMS ((uint32));
|
||||
static void do_format_9_10 PARAMS ((uint32));
|
||||
static void init_system PARAMS ((void));
|
||||
|
||||
#define MAX_HASH 63
|
||||
struct hash_entry
|
||||
|
@ -26,25 +44,22 @@ struct hash_entry
|
|||
|
||||
struct hash_entry hash_table[MAX_HASH+1];
|
||||
|
||||
static long
|
||||
|
||||
static INLINE long
|
||||
hash(insn)
|
||||
long insn;
|
||||
{
|
||||
if ((insn & 0x0600) == 0
|
||||
|| (insn & 0x0700) == 0x0200)
|
||||
|| (insn & 0x0700) == 0x0200
|
||||
|| (insn & 0x0700) == 0x0600
|
||||
|| (insn & 0x0780) == 0x0700)
|
||||
return (insn & 0x07e0) >> 5;
|
||||
if ((insn & 0x0700) == 0x0300
|
||||
|| (insn & 0x0700) == 0x0400
|
||||
|| (insn & 0x0700) == 0x0500)
|
||||
return (insn & 0x0780) >> 7;
|
||||
if ((insn & 0x0700) == 0x0600)
|
||||
return (insn & 0x07e0) >> 5;
|
||||
if ((insn & 0x0780) == 0x0700)
|
||||
return (insn & 0x07e0) >> 5;
|
||||
if ((insn & 0x07c0) == 0x0780)
|
||||
return (insn & 0x07c0) >> 6;
|
||||
if ((insn & 0x07E0) == 0x07C0)
|
||||
return (insn & 0x07e0) >> 5;
|
||||
return (insn & 0x07e0) >> 5;
|
||||
}
|
||||
|
||||
|
@ -56,7 +71,7 @@ lookup_hash (ins)
|
|||
|
||||
h = &hash_table[hash(ins)];
|
||||
|
||||
while ( (ins & h->mask) != h->opcode)
|
||||
while ((ins & h->mask) != h->opcode)
|
||||
{
|
||||
if (h->next == NULL)
|
||||
{
|
||||
|
@ -209,7 +224,7 @@ do_format_8 (insn)
|
|||
}
|
||||
|
||||
static void
|
||||
do_formats_9_10 (insn)
|
||||
do_format_9_10 (insn)
|
||||
uint32 insn;
|
||||
{
|
||||
struct hash_entry *h;
|
||||
|
@ -266,7 +281,7 @@ sim_open (args)
|
|||
char *args;
|
||||
{
|
||||
struct simops *s;
|
||||
struct hash_entry *h, *prev;
|
||||
struct hash_entry *h;
|
||||
if (args != NULL)
|
||||
printf ("sim_open %s\n",args);
|
||||
|
||||
|
@ -317,10 +332,8 @@ sim_resume (step, siggnal)
|
|||
int step, siggnal;
|
||||
{
|
||||
uint32 inst, opcode;
|
||||
int i;
|
||||
reg_t oldpc;
|
||||
|
||||
|
||||
if (step)
|
||||
State.exception = SIGTRAP;
|
||||
else
|
||||
|
@ -373,7 +386,7 @@ sim_resume (step, siggnal)
|
|||
}
|
||||
else
|
||||
{
|
||||
do_formats_9_10 (inst);
|
||||
do_format_9_10 (inst);
|
||||
PC += 4;
|
||||
}
|
||||
}
|
||||
|
@ -449,6 +462,7 @@ sim_store_register (rn, memory)
|
|||
State.regs[rn]= *(uint32 *)memory;
|
||||
}
|
||||
|
||||
int
|
||||
sim_read (addr, buffer, size)
|
||||
SIM_ADDR addr;
|
||||
unsigned char *buffer;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <signal.h>
|
||||
#include "v850_sim.h"
|
||||
#include "simops.h"
|
||||
#include "sys/syscall.h"
|
||||
|
||||
/* sld.b */
|
||||
void
|
||||
|
@ -466,10 +467,6 @@ OP_1C0 ()
|
|||
ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
|
||||
&& (op0 & 0x80000000) != (result & 0x80000000));
|
||||
|
||||
/* According to the manual, 's' is inverted if 'ov'
|
||||
is set. */
|
||||
s = ov ? !s : s;
|
||||
|
||||
/* Store the result and condition codes. */
|
||||
State.regs[OP[1]] = result;
|
||||
State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
|
||||
|
@ -498,10 +495,6 @@ OP_240 ()
|
|||
ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
|
||||
&& (op0 & 0x80000000) != (result & 0x80000000));
|
||||
|
||||
/* According to the manual, 's' is inverted if 'ov'
|
||||
is set. */
|
||||
s = ov ? !s : s;
|
||||
|
||||
/* Store the result and condition codes. */
|
||||
State.regs[OP[1]] = result;
|
||||
State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
|
||||
|
@ -530,10 +523,6 @@ OP_600 ()
|
|||
ov = ((op0 & 0x80000000) == (op1 & 0x80000000)
|
||||
&& (op0 & 0x80000000) != (result & 0x80000000));
|
||||
|
||||
/* According to the manual, 's' is inverted if 'ov'
|
||||
is set. */
|
||||
s = ov ? !s : s;
|
||||
|
||||
/* Store the result and condition codes. */
|
||||
State.regs[OP[2]] = result;
|
||||
State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
|
||||
|
@ -559,10 +548,6 @@ OP_1A0 ()
|
|||
ov = ((op1 & 0x80000000) != (op0 & 0x80000000)
|
||||
&& (op1 & 0x80000000) != (result & 0x80000000));
|
||||
|
||||
/* According to the manual, 's' is inverted if 'ov'
|
||||
is set. */
|
||||
s = ov ? !s : s;
|
||||
|
||||
/* Store the result and condition codes. */
|
||||
State.regs[OP[1]] = result;
|
||||
State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
|
||||
|
@ -588,10 +573,6 @@ OP_180 ()
|
|||
ov = ((op0 & 0x80000000) != (op1 & 0x80000000)
|
||||
&& (op0 & 0x80000000) != (result & 0x80000000));
|
||||
|
||||
/* According to the manual, 's' is inverted if 'ov'
|
||||
is set. */
|
||||
s = ov ? !s : s;
|
||||
|
||||
/* Store the result and condition codes. */
|
||||
State.regs[OP[1]] = result;
|
||||
State.sregs[5] &= ~(PSW_Z | PSW_S | PSW_CY | PSW_OV);
|
||||
|
@ -1411,10 +1392,6 @@ OP_10007E0 ()
|
|||
|
||||
if (OP[0] == 0)
|
||||
{
|
||||
#if 0
|
||||
char *fstr = State.regs[2] + State.imem;
|
||||
printf (fstr,State.regs[3],State.regs[4],State.regs[5]);
|
||||
#else
|
||||
int save_errno = errno;
|
||||
errno = 0;
|
||||
|
||||
|
@ -1437,7 +1414,6 @@ OP_10007E0 ()
|
|||
|
||||
switch (FUNC)
|
||||
{
|
||||
#if 0
|
||||
#if !defined(__GO32__) && !defined(_WIN32)
|
||||
case SYS_fork:
|
||||
RETVAL = fork ();
|
||||
|
@ -1449,6 +1425,7 @@ OP_10007E0 ()
|
|||
case SYS_execv:
|
||||
RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL);
|
||||
break;
|
||||
#if 0
|
||||
case SYS_pipe:
|
||||
{
|
||||
reg_t buf;
|
||||
|
@ -1470,13 +1447,13 @@ OP_10007E0 ()
|
|||
SW (PARM1, status);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
case SYS_read:
|
||||
RETVAL = v850_callback->read (v850_callback, PARM1, MEMPTR (PARM2),
|
||||
PARM3);
|
||||
break;
|
||||
#endif
|
||||
case SYS_write:
|
||||
if (PARM1 == 1)
|
||||
RETVAL = (int)v850_callback->write_stdout (v850_callback,
|
||||
|
@ -1485,7 +1462,6 @@ OP_10007E0 ()
|
|||
RETVAL = (int)v850_callback->write (v850_callback, PARM1,
|
||||
MEMPTR (PARM2), PARM3);
|
||||
break;
|
||||
#if 0
|
||||
case SYS_lseek:
|
||||
RETVAL = v850_callback->lseek (v850_callback, PARM1, PARM2, PARM3);
|
||||
break;
|
||||
|
@ -1495,7 +1471,6 @@ OP_10007E0 ()
|
|||
case SYS_open:
|
||||
RETVAL = v850_callback->open (v850_callback, MEMPTR (PARM1), PARM2);
|
||||
break;
|
||||
#endif
|
||||
case SYS_exit:
|
||||
/* EXIT - caller can look in PARM1 to work out the
|
||||
reason */
|
||||
|
@ -1531,6 +1506,7 @@ OP_10007E0 ()
|
|||
SLW (buf+28, host_stat.st_mtime);
|
||||
SLW (buf+36, host_stat.st_ctime);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case SYS_chown:
|
||||
|
@ -1544,13 +1520,11 @@ OP_10007E0 ()
|
|||
if a prototype is present. */
|
||||
RETVAL = utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2));
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
abort ();
|
||||
}
|
||||
RETERR = errno;
|
||||
errno = save_errno;
|
||||
#endif
|
||||
}
|
||||
else if (OP[0] == 1 )
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue