diff options
-rw-r--r-- | sim/rx/ChangeLog | 9 | ||||
-rw-r--r-- | sim/rx/rx.c | 16 |
2 files changed, 24 insertions, 1 deletions
diff --git a/sim/rx/ChangeLog b/sim/rx/ChangeLog index 762815d..15bc12f 100644 --- a/sim/rx/ChangeLog +++ b/sim/rx/ChangeLog @@ -1,3 +1,12 @@ +2015-11-10 Nick Clifton <nickc@redhat.com> + + * rx.c (id_names): Add nop4, nop5, nop6 and nop7. + (decode_opcode): Likewise. + (get_op): Handle RX_Operand_Zero_Indirect. + Handle RX_Bad_Size and RX_MAX_SIZE. + (put_op): Likewise. + (N_MAP): Increase to 90. + 2015-06-23 Mike Frysinger <vapier@gentoo.org> * configure.ac (AC_ARG_ENABLE(cycle-accurate)): Call AS_HELP_STRING. diff --git a/sim/rx/rx.c b/sim/rx/rx.c index 31c1443..e48f6c8 100644 --- a/sim/rx/rx.c +++ b/sim/rx/rx.c @@ -80,6 +80,10 @@ static const char * id_names[] = { "RXO_nop", "RXO_nop2", "RXO_nop3", + "RXO_nop4", + "RXO_nop5", + "RXO_nop6", + "RXO_nop7", "RXO_scmpu", "RXO_smovu", @@ -149,7 +153,7 @@ static const char * optype_names[] = { #define N_RXO (sizeof(id_names)/sizeof(id_names[0])) #define N_RXT (sizeof(optype_names)/sizeof(optype_names[0])) -#define N_MAP 30 +#define N_MAP 90 static unsigned long long benchmark_start_cycle; static unsigned long long benchmark_end_cycle; @@ -406,6 +410,7 @@ get_op (const RX_Opcode_Decoded *rd, int i) put_reg (o->reg, get_reg (o->reg) - size2bytes[o->size]); /* fall through */ case RX_Operand_Postinc: /* [Rn+] */ + case RX_Operand_Zero_Indirect: /* [Rn + 0] */ case RX_Operand_Indirect: /* [Rn + addend] */ case RX_Operand_TwoReg: /* [Rn + scale * R2] */ #ifdef CYCLE_ACCURATE @@ -433,6 +438,7 @@ get_op (const RX_Opcode_Decoded *rd, int i) switch (o->size) { + default: case RX_AnySize: rx_abort (); @@ -473,6 +479,7 @@ get_op (const RX_Opcode_Decoded *rd, int i) to the size. */ switch (o->size) { + default: case RX_AnySize: rx_abort (); @@ -518,6 +525,7 @@ put_op (const RX_Opcode_Decoded *rd, int i, int v) switch (o->size) { + default: case RX_AnySize: if (o->type != RX_Operand_Register) rx_abort (); @@ -574,6 +582,7 @@ put_op (const RX_Opcode_Decoded *rd, int i, int v) put_reg (o->reg, get_reg (o->reg) - size2bytes[o->size]); /* fall through */ case RX_Operand_Postinc: /* [Rn+] */ + case RX_Operand_Zero_Indirect: /* [Rn + 0] */ case RX_Operand_Indirect: /* [Rn + addend] */ case RX_Operand_TwoReg: /* [Rn + scale * R2] */ @@ -597,6 +606,7 @@ put_op (const RX_Opcode_Decoded *rd, int i, int v) switch (o->size) { + default: case RX_AnySize: rx_abort (); @@ -1504,6 +1514,10 @@ decode_opcode () case RXO_nop: case RXO_nop2: case RXO_nop3: + case RXO_nop4: + case RXO_nop5: + case RXO_nop6: + case RXO_nop7: E1; break; |