Move free_all_objfiles to program_space
[deliverable/binutils-gdb.git] / opcodes / s12z-opc.c
index eef097dfd48667d1add51d9a0137a294d3d2bfe4..044c72a21cad948b7630e71d0d29fd91ebab1d20 100644 (file)
@@ -256,7 +256,8 @@ xysp_reg_from_postbyte (uint8_t postbyte)
   return reg;
 }
 
-static struct operand * create_immediate_operand (int value)
+static struct operand *
+create_immediate_operand (int value)
 {
   struct immediate_operand *op = malloc (sizeof (*op));
 
@@ -267,7 +268,8 @@ static struct operand * create_immediate_operand (int value)
   return (struct operand *) op;
 }
 
-static struct operand * create_bitfield_operand (int width, int offset)
+static struct operand *
+create_bitfield_operand (int width, int offset)
 {
   struct bitfield_operand *op = malloc (sizeof (*op));
 
@@ -297,7 +299,8 @@ create_register_operand (int reg)
   return create_register_operand_with_size (reg, -1);
 }
 
-static struct operand * create_register_all_operand (void)
+static struct operand *
+create_register_all_operand (void)
 {
   struct register_operand *op = malloc (sizeof (*op));
 
@@ -307,7 +310,8 @@ static struct operand * create_register_all_operand (void)
   return (struct operand *) op;
 }
 
-static struct operand * create_register_all16_operand (void)
+static struct operand *
+create_register_all16_operand (void)
 {
   struct register_operand *op = malloc (sizeof (*op));
 
@@ -371,7 +375,8 @@ create_memory_auto_operand (enum op_reg_mutation mutation, int reg)
 \f
 
 static void
-z_ext24_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand)
+z_ext24_decode (struct mem_read_abstraction_base *mra, int *n_operands,
+               struct operand **operand)
 {
   uint8_t buffer[3];
   int status = mra->read (mra, 0, 3, buffer);
@@ -391,7 +396,8 @@ z_ext24_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct o
 
 
 static uint32_t
-z_decode_signed_value (struct mem_read_abstraction_base *mra, int offset, short size)
+z_decode_signed_value (struct mem_read_abstraction_base *mra, int offset,
+                      short size)
 {
   assert (size >0);
   assert (size <= 4);
@@ -404,9 +410,7 @@ z_decode_signed_value (struct mem_read_abstraction_base *mra, int offset, short
   int i;
   uint32_t value = 0;
   for (i = 0; i < size; ++i)
-    {
-      value |= buffer[i] << (8 * (size - i - 1));
-    }
+    value = (value << 8) | buffer[i];
 
   if (buffer[0] & 0x80)
     {
@@ -438,7 +442,7 @@ x_imm1 (struct mem_read_abstraction_base *mra,
 /* An eight bit immediate operand.  */
 static void
 imm1_decode (struct mem_read_abstraction_base *mra,
-       int *n_operands, struct operand **operand)
+            int *n_operands, struct operand **operand)
 {
   x_imm1 (mra, 0, n_operands, operand);
 }
@@ -485,30 +489,30 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
        else
          n = x;
 
-        operand = create_immediate_operand (n);
+       operand = create_immediate_operand (n);
        break;
       }
     case OPR_REG:
       {
        uint8_t x = (postbyte & 0x07);
-        operand = create_register_operand (x);
+       operand = create_register_operand (x);
        break;
       }
     case OPR_OFXYS:
       {
-        operand = create_memory_operand (false, postbyte & 0x0F, 1,
+       operand = create_memory_operand (false, postbyte & 0x0F, 1,
                                         xysp_reg_from_postbyte (postbyte), -1);
        break;
       }
     case OPR_REG_DIRECT:
       {
-        operand = create_memory_operand (false, 0, 2, postbyte & 0x07,
+       operand = create_memory_operand (false, 0, 2, postbyte & 0x07,
                                         xysp_reg_from_postbyte (postbyte));
        break;
       }
     case OPR_REG_INDIRECT:
       {
-        operand = create_memory_operand (true, 0, 2, postbyte & 0x07,
+       operand = create_memory_operand (true, 0, 2, postbyte & 0x07,
                                         (postbyte & 0x10) ? REG_Y : REG_X);
        break;
       }
@@ -525,7 +529,7 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
            idx -= 0x1UL << 8;
          }
 
-        operand = create_memory_operand (true, idx, 1,
+       operand = create_memory_operand (true, idx, 1,
                                         xysp_reg_from_postbyte (postbyte), -1);
        break;
       }
@@ -542,7 +546,7 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
            idx -= 0x1UL << 24;
          }
 
-        operand = create_memory_operand (false, idx, 1,
+       operand = create_memory_operand (false, idx, 1,
                                         xysp_reg_from_postbyte (postbyte), -1);
        break;
       }
@@ -559,7 +563,7 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
            idx -= 0x1UL << 24;
          }
 
-        operand = create_memory_operand (false, idx, 1, postbyte & 0x07, -1);
+       operand = create_memory_operand (false, idx, 1, postbyte & 0x07, -1);
        break;
       }
 
@@ -592,7 +596,7 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
            idx -= 0x1UL << 8;
          }
 
-        operand = create_memory_operand (false, idx, 1,
+       operand = create_memory_operand (false, idx, 1,
                                         xysp_reg_from_postbyte (postbyte), -1);
        break;
       }
@@ -604,7 +608,7 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
        uint32_t idx = x[1] | x[0] << 8 ;
        idx |= (postbyte & 0x30) << 12;
 
-        operand = create_memory_operand (false, idx, 1, postbyte & 0x07, -1);
+       operand = create_memory_operand (false, idx, 1, postbyte & 0x07, -1);
        break;
       }
 
@@ -709,7 +713,7 @@ x_opr_decode_with_size (struct mem_read_abstraction_base *mra, int offset,
            ext24 |= buffer[i] << (8 * (size - i - 1));
          }
 
-        operand = create_memory_operand (true, ext24, 0, -1, -1);
+       operand = create_memory_operand (true, ext24, 0, -1, -1);
        break;
       }
 
@@ -1003,7 +1007,9 @@ sub_d6_y_x (struct mem_read_abstraction_base *mra ATTRIBUTE_UNUSED,
   operand[(*n_operands)++] = create_register_operand (REG_X);
 }
 
-static void ld_18bit_decode (struct mem_read_abstraction_base *mra, int *n_operands, struct operand **operand);
+static void
+ld_18bit_decode (struct mem_read_abstraction_base *mra, int *n_operands,
+                struct operand **operand);
 
 static enum optr
 mul_discrim (struct mem_read_abstraction_base *mra, enum optr hint)
@@ -2195,24 +2201,32 @@ loop_prim_n_bytes (struct mem_read_abstraction_base *mra)
 \f
 
 static enum optr
-exg_sex_discrim (struct mem_read_abstraction_base *mra, enum optr hint ATTRIBUTE_UNUSED)
+exg_sex_discrim (struct mem_read_abstraction_base *mra,
+                enum optr hint ATTRIBUTE_UNUSED)
 {
   uint8_t eb;
   int status = mra->read (mra, 0, 1, &eb);
+  enum optr operator = OP_INVALID;
   if (status < 0)
-    return OP_INVALID;
+    return operator;
 
   struct operand *op0 = create_register_operand ((eb & 0xf0) >> 4);
   struct operand *op1 = create_register_operand (eb & 0xf);
 
-  const struct reg *r0 = registers + ((struct register_operand *) op0)->reg;
-  const struct reg *r1 = registers + ((struct register_operand *) op1)->reg;
+  int reg0 = ((struct register_operand *) op0)->reg;
+  int reg1 = ((struct register_operand *) op1)->reg;
+  if (reg0 >= 0 && reg0 < S12Z_N_REGISTERS
+      && reg1 >= 0 && reg1 < S12Z_N_REGISTERS)
+    {
+      const struct reg *r0 = registers + reg0;
+      const struct reg *r1 = registers + reg1;
 
-  enum optr operator = (r0->bytes < r1->bytes) ? OP_sex : OP_exg;
+      operator = r0->bytes < r1->bytes ? OP_sex : OP_exg;
+    }
 
   free (op0);
   free (op1);
-  
+
   return operator;
 }
 
@@ -2246,7 +2260,7 @@ loop_primitive_discrim (struct mem_read_abstraction_base *mra,
 
 static void
 loop_primitive_decode (struct mem_read_abstraction_base *mra,
-                 int *n_operands, struct operand **operands)
+                      int *n_operands, struct operand **operands)
 {
   int offs = 1;
   uint8_t lb;
@@ -2286,7 +2300,8 @@ loop_primitive_decode (struct mem_read_abstraction_base *mra,
 
 
 static enum optr
-shift_discrim (struct mem_read_abstraction_base *mra,  enum optr hint ATTRIBUTE_UNUSED)
+shift_discrim (struct mem_read_abstraction_base *mra,
+              enum optr hint ATTRIBUTE_UNUSED)
 {
   size_t i;
   uint8_t sb;
@@ -2315,7 +2330,8 @@ shift_discrim (struct mem_read_abstraction_base *mra,  enum optr hint ATTRIBUTE_
 
 
 static void
-shift_decode (struct mem_read_abstraction_base *mra,  int *n_operands, struct operand **operands)
+shift_decode (struct mem_read_abstraction_base *mra, int *n_operands,
+             struct operand **operands)
 {
   size_t i;
 
@@ -2407,30 +2423,30 @@ shift_decode (struct mem_read_abstraction_base *mra,  int *n_operands, struct op
 
     case SB_REG_REG_N:
       {
-        uint8_t xb;
-        mra->read (mra, 1, 1, &xb);
-
-        /* This case is slightly unusual.
-           If XB matches the binary pattern 0111XXXX, then instead of
-           interpreting this as a general OPR postbyte in the IMMe4 mode,
-           the XB byte is interpreted in s special way.  */
-        if ((xb & 0xF0) == 0x70)
-          {
-            if (byte & 0x10)
-              {
-                int shift = ((sb & 0x08) >> 3) | ((xb & 0x0f) << 1);
-                operands[(*n_operands)++] = create_immediate_operand (shift);
-              }
-            else
-              {
-                /* This should not happen.  */
-                abort ();
-              }
-          }
-        else
-          {
-            operands[(*n_operands)++] = x_opr_decode (mra, 1);
-          }
+       uint8_t xb;
+       mra->read (mra, 1, 1, &xb);
+
+       /* This case is slightly unusual.
+          If XB matches the binary pattern 0111XXXX, then instead of
+          interpreting this as a general OPR postbyte in the IMMe4 mode,
+          the XB byte is interpreted in s special way.  */
+       if ((xb & 0xF0) == 0x70)
+         {
+           if (byte & 0x10)
+             {
+               int shift = ((sb & 0x08) >> 3) | ((xb & 0x0f) << 1);
+               operands[(*n_operands)++] = create_immediate_operand (shift);
+             }
+           else
+             {
+               /* This should not happen.  */
+               abort ();
+             }
+         }
+       else
+         {
+           operands[(*n_operands)++] = x_opr_decode (mra, 1);
+         }
       }
       break;
     case SB_REG_OPR_OPR:
@@ -2462,8 +2478,8 @@ shift_decode (struct mem_read_abstraction_base *mra,  int *n_operands, struct op
     case SB_REG_OPR_EFF:
     case SB_OPR_N:
       {
-        int imm = (sb & 0x08) ? 2 : 1;
-        operands[(*n_operands)++] = create_immediate_operand (imm);
+       int imm = (sb & 0x08) ? 2 : 1;
+       operands[(*n_operands)++] = create_immediate_operand (imm);
       }
       break;
 
@@ -2497,9 +2513,7 @@ psh_pul_decode (struct mem_read_abstraction_base *mra,
   if (byte & 0x40)
     {
       if ((byte & 0x3F) == 0)
-        {
-         operand[(*n_operands)++] = create_register_all16_operand ();
-        }
+       operand[(*n_operands)++] = create_register_all16_operand ();
       else
        for (bit = 5; bit >= 0; --bit)
          {
@@ -2512,9 +2526,7 @@ psh_pul_decode (struct mem_read_abstraction_base *mra,
   else
     {
       if ((byte & 0x3F) == 0)
-        {
-         operand[(*n_operands)++] = create_register_all_operand ();
-        }
+       operand[(*n_operands)++] = create_register_all_operand ();
       else
        for (bit = 5; bit >= 0; --bit)
          {
@@ -2527,7 +2539,8 @@ psh_pul_decode (struct mem_read_abstraction_base *mra,
 }
 
 static enum optr
-bit_field_discrim (struct mem_read_abstraction_base *mra, enum optr hint ATTRIBUTE_UNUSED)
+bit_field_discrim (struct mem_read_abstraction_base *mra,
+                  enum optr hint ATTRIBUTE_UNUSED)
 {
   int status;
   bfd_byte bb;
@@ -2561,10 +2574,10 @@ bit_field_decode (struct mem_read_abstraction_base *mra,
     {
       bbs = bb_modes + i;
       if ((bb & bbs->mask) == bbs->value)
-        {
-          mode = bbs->mode;
-          break;
-        }
+       {
+         mode = bbs->mode;
+         break;
+       }
     }
   int reg1 = byte2 & 0x07;
   /* First operand */
@@ -2592,15 +2605,15 @@ bit_field_decode (struct mem_read_abstraction_base *mra,
     case BB_REG_REG_REG:
     case BB_REG_REG_IMM:
       {
-        int reg_src = (bb >> 2) & 0x07;
-        operands[(*n_operands)++] = create_register_operand (reg_src);
+       int reg_src = (bb >> 2) & 0x07;
+       operands[(*n_operands)++] = create_register_operand (reg_src);
       }
       break;
     case BB_OPR_REG_REG:
     case BB_OPR_REG_IMM:
       {
-        int reg_src = (byte2 & 0x07);
-        operands[(*n_operands)++] = create_register_operand (reg_src);
+       int reg_src = (byte2 & 0x07);
+       operands[(*n_operands)++] = create_register_operand (reg_src);
       }
       break;
     case BB_REG_OPR_REG:
@@ -2620,7 +2633,7 @@ bit_field_decode (struct mem_read_abstraction_base *mra,
     case BB_OPR_REG_REG:
     case BB_REG_OPR_REG:
       {
-        int reg_parm = bb & 0x03;
+       int reg_parm = bb & 0x03;
        operands[(*n_operands)++] = create_register_operand (reg_parm);
       }
       break;
@@ -2628,13 +2641,13 @@ bit_field_decode (struct mem_read_abstraction_base *mra,
     case BB_OPR_REG_IMM:
     case BB_REG_OPR_IMM:
       {
-        bfd_byte i1;
-        mra->read (mra, 1, 1, &i1);
-        int offset = i1 & 0x1f;
-        int width = bb & 0x03;
-        width <<= 3;
-        width |= i1 >> 5;
-        operands[(*n_operands)++] = create_bitfield_operand (width, offset);
+       bfd_byte i1;
+       mra->read (mra, 1, 1, &i1);
+       int offset = i1 & 0x1f;
+       int width = bb & 0x03;
+       width <<= 3;
+       width |= i1 >> 5;
+       operands[(*n_operands)++] = create_bitfield_operand (width, offset);
       }
       break;
     }
This page took 0.0324 seconds and 4 git commands to generate.