x86: de-duplicate sub-architecture strings accumulation
[binutils-gdb.git] / gas / cgen.c
index 2a57a78ff85baddf6e1139176d00430039406e1a..209ae4d9fb0fb0ecd89275ddc25fe5c386062248 100644 (file)
@@ -1,5 +1,5 @@
 /* GAS interface for targets using CGEN: Cpu tools GENerator.
-   Copyright (C) 1996-2018 Free Software Foundation, Inc.
+   Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -61,7 +61,7 @@ cgen_asm_record_register (char *name, int number)
   /* Use symbol_create here instead of symbol_new so we don't try to
      output registers into the object file's symbol table.  */
   symbol_table_insert (symbol_create (name, reg_section,
-                                     number, &zero_address_frag));
+                                     &zero_address_frag, number));
 }
 
 /* We need to keep a list of fixups.  We can't simply generate them as
@@ -437,8 +437,8 @@ gas_cgen_parse_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED,
                 prematurely dives into the symbol evaluator, and in this
                 case it gets a bad answer, so we manually create the
                 expression symbol we want here.  */
-             stmp = symbol_create (FAKE_LABEL_NAME, expr_section, 0,
-                                   & zero_address_frag);
+             stmp = symbol_create (FAKE_LABEL_NAME, expr_section,
+                                   &zero_address_frag, 0);
              symbol_set_value_expression (stmp, & exp);
            }
          else
@@ -621,7 +621,8 @@ gas_cgen_finish_insn (const CGEN_INSN *insn, CGEN_INSN_BYTES_PTR buf,
   /* If we're recording insns as numbers (rather than a string of bytes),
      target byte order handling is deferred until now.  */
 #if CGEN_INT_INSN_P
-  cgen_put_insn_value (gas_cgen_cpu_desc, (unsigned char *) f, length, *buf);
+  cgen_put_insn_value (gas_cgen_cpu_desc, (unsigned char *) f, length, *buf,
+                       gas_cgen_cpu_desc->insn_endian);
 #else
   memcpy (f, buf, byte_len);
 #endif
@@ -758,7 +759,7 @@ weak_operand_overflow_check (const expressionS *  exp,
 {
   const unsigned long len = operand->length;
   unsigned long mask;
-  unsigned long opmask = (((1L << (len - 1)) - 1) << 1) | 1;
+  unsigned long opmask = len == 0 ? 0 : (1UL << (len - 1) << 1) - 1;
 
   if (!exp)
     return NULL;
@@ -906,13 +907,15 @@ gas_cgen_md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
          {
            CGEN_INSN_INT insn_value =
              cgen_get_insn_value (cd, (unsigned char *) where,
-                                  CGEN_INSN_BITSIZE (insn));
+                                  CGEN_INSN_BITSIZE (insn),
+                                   cd->insn_endian);
 
            /* ??? 0 is passed for `pc'.  */
            errmsg = CGEN_CPU_INSERT_OPERAND (cd) (cd, opindex, fields,
                                                   &insn_value, (bfd_vma) 0);
            cgen_put_insn_value (cd, (unsigned char *) where,
-                                CGEN_INSN_BITSIZE (insn), insn_value);
+                                CGEN_INSN_BITSIZE (insn), insn_value,
+                                 cd->insn_endian);
          }
 #else
          /* ??? 0 is passed for `pc'.  */