gdb: Fix scrolling in TUI
[deliverable/binutils-gdb.git] / opcodes / arc-opc.c
index 56c9aaffa86a44ee19c46a10db303b323782ac63..b90e5dad1b0c798e99d0de453dcaf05b0b79e6aa 100644 (file)
@@ -1,5 +1,5 @@
 /* Opcode table for the ARC.
-   Copyright (C) 1994-2017 Free Software Foundation, Inc.
+   Copyright (C) 1994-2020 Free Software Foundation, Inc.
 
    Contributed by Claudiu Zissulescu (claziss@synopsys.com)
 
@@ -171,6 +171,8 @@ insert_rhv2 (unsigned long long  insn,
 {
   if (value == 0x1E)
     *errmsg = _("register R30 is a limm indicator");
+  else if (value < 0 || value > 31)
+    *errmsg = _("register out of range");
   return insn |= ((value & 0x07) << 5) | ((value >> 3) & 0x03);
 }
 
@@ -649,10 +651,14 @@ static long long
 extract_w6 (unsigned long long  insn,
            bfd_boolean *       invalid ATTRIBUTE_UNUSED)
 {
-  unsigned value = 0;
+  int value = 0;
 
   value |= ((insn >> 6) & 0x003f) << 0;
 
+  /* Extend the sign.  */
+  int signbit = 1 << 5;
+  value = (value ^ signbit) - signbit;
+
   return value;
 }
 
@@ -1816,7 +1822,9 @@ const struct arc_operand arc_operands[] =
 
 #define RAD            (RBdup + 1)
   { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 },
-#define RCD            (RAD + 1)
+#define RAD_CHK                (RAD + 1)
+  { 6, 0, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rad, 0 },
+#define RCD            (RAD_CHK + 1)
   { 6, 6, 0, ARC_OPERAND_IR | ARC_OPERAND_TRUNCATE, insert_rcd, 0 },
 
   /* The plain integer register fields.  Used by short
This page took 0.024476 seconds and 4 git commands to generate.