forked from Imagelibrary/binutils-gdb
* 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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user