* mem.c (mem_put_byte): Hook simulated UART to stdout.

(mem_put_hi): Hook in simulated trace port.
(mem_get_byte): Hook in simulated uart control port.
* opc2c: Be more picky about matching special comments.
* r8c.opc (shift_op): Limit shift counts to -16..16.
(BMcnd): Map conditional codes.
* reg.c (condition_true): Mask condition code to 4 bits.
* syscalls.c: Include local syscall.h.
* syscall.h: New, copied from libgloss.
This commit is contained in:
DJ Delorie
2006-03-14 03:34:28 +00:00
parent 1f810f7808
commit 727b6b4b41
6 changed files with 111 additions and 12 deletions

View File

@@ -240,6 +240,15 @@ shift_op (srcdest sd, int arith, int count)
{
mask = 0xffffffffU;
msb = 0x80000000U;
if (count > 16 || count < -16)
{
fprintf(stderr, "Error: SI shift of %d undefined\n", count);
exit(1);
}
if (count > 16)
count = (count - 1) % 16 + 1;
if (count < -16)
count = -((-count - 1) % 16 + 1);
}
tprintf("%s %x by %d\n", arith ? "sha" : "shl", v, count);
@@ -292,6 +301,12 @@ shift_op (srcdest sd, int arith, int count)
tprintf ("b=%d, carry=%d, %s = %d\n", b, carry, #expr, v); \
set_c (v);
/* The "BMcnd dest" opcode uses a different encoding for the */
/* condition than other opcodes. */
static int bmcnd_cond_map[] = {
0, 1, 2, 3, 8, 9, 10, 11, 4, 5, 6, 7, 12, 13, 14, 15
};
int
decode_r8c()
{
@@ -448,7 +463,7 @@ decode_r8c()
/** 0111 1110 0010 dest BMcnd dest */
dc = decode_bit (dest);
if (condition_true (IMM (0)))
if (condition_true (bmcnd_cond_map [IMM (0) & 15]))
put_bit (dc, 1);
else
put_bit (dc, 0);