]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/config/tc-arm.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / config / tc-arm.h
index ebcf27bef839bc8f51a8b00d30f53f88ae558e47..641ddc46b0b9b601cb5468301d82c5a22c19354b 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is tc-arm.h
-   Copyright (C) 1994-2017 Free Software Foundation, Inc.
+   Copyright (C) 1994-2021 Free Software Foundation, Inc.
    Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
        Modified by David Taylor (dtaylor@armltd.co.uk)
 
 
 struct fix;
 
-#if defined OBJ_AOUT
-# if defined TE_RISCIX
-#  define TARGET_FORMAT "a.out-riscix"
-# elif defined TE_LINUX
-#  define ARM_BI_ENDIAN
-#  define TARGET_FORMAT "a.out-arm-linux"
-# elif defined TE_NetBSD
-#  define TARGET_FORMAT "a.out-arm-netbsd"
-# else
-#  define ARM_BI_ENDIAN
-#  define TARGET_FORMAT (target_big_endian ? "a.out-arm-big" : "a.out-arm-little")
-# endif
-#elif defined OBJ_AIF
-# define TARGET_FORMAT "aif"
-#elif defined OBJ_COFF
+#if defined OBJ_COFF
 # define ARM_BI_ENDIAN
 # if defined TE_PE
-#  if defined TE_EPOC
-#   define TARGET_FORMAT (target_big_endian ? "epoc-pe-arm-big" : "epoc-pe-arm-little")
-#  elif defined TE_WINCE
+#  if defined TE_WINCE
 #   define TARGET_FORMAT (target_big_endian ? "pe-arm-wince-big" : "pe-arm-wince-little")
 #  else
 #   define TARGET_FORMAT (target_big_endian ? "pe-arm-big" : "pe-arm-little")
@@ -118,8 +102,8 @@ extern bfd_boolean tc_start_label_without_colon (void);
 extern void arm_md_end (void);
 bfd_boolean arm_is_eabi (void);
 
-#define md_post_relax_hook             aeabi_set_public_attributes ()
-extern void aeabi_set_public_attributes (void);
+#define md_post_relax_hook             arm_md_post_relax ()
+extern void arm_md_post_relax (void);
 #endif
 
 /* NOTE: The fake label creation in stabs.c:s_stab_generic() has
@@ -200,17 +184,17 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *);
    pcrel, but it is easier to be safe than sorry.  */
 
 #define TC_FORCE_RELOCATION_LOCAL(FIX)                 \
-  (!(FIX)->fx_pcrel                                    \
+  (GENERIC_FORCE_RELOCATION_LOCAL (FIX)                        \
    || (FIX)->fx_r_type == BFD_RELOC_ARM_GOT32          \
    || (FIX)->fx_r_type == BFD_RELOC_32                 \
-   || ((FIX)->fx_addsy != NULL && S_IS_WEAK ((FIX)->fx_addsy)) \
-   || TC_FORCE_RELOCATION (FIX))
+   || ((FIX)->fx_addsy != NULL                         \
+       && S_IS_WEAK ((FIX)->fx_addsy)))
 
 /* Force output of R_ARM_REL32 relocations against thumb function symbols.
    This is needed to ensure the low bit is handled correctly.  */
 #define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
-  (THUMB_IS_FUNC ((FIX)->fx_addsy)             \
-   || !SEG_NORMAL (SEG))
+  (GENERIC_FORCE_RELOCATION_SUB_SAME (FIX, SEG)        \
+   || THUMB_IS_FUNC ((FIX)->fx_addsy))
 
 #define TC_FORCE_RELOCATION_ABS(FIX)                   \
   (((FIX)->fx_pcrel                                    \
@@ -245,8 +229,7 @@ arm_min (int am_p1, int am_p2)
 }
 
 #define TC_FRAG_TYPE           struct arm_frag_type
-/* NOTE: max_chars is a local variable from frag_var / frag_variant.  */
-#define TC_FRAG_INIT(fragp)    arm_init_frag (fragp, max_chars)
+#define TC_FRAG_INIT(fragp, max_bytes) arm_init_frag (fragp, max_bytes)
 #define TC_ALIGN_ZERO_IS_DEFAULT 1
 #define HANDLE_ALIGN(fragp)    arm_handle_align (fragp)
 /* PR gas/19276: COFF/PE segment alignment is already handled in coff_frob_section().  */
@@ -271,21 +254,25 @@ arm_min (int am_p1, int am_p2)
 /* Registers are generally saved at negative offsets to the CFA.  */
 #define DWARF2_CIE_DATA_ALIGNMENT     (-4)
 
-/* State variables for IT block handling.  */
-enum it_state
+/* State variables for predication block handling.  */
+enum pred_state
 {
-  OUTSIDE_IT_BLOCK, MANUAL_IT_BLOCK, AUTOMATIC_IT_BLOCK
+  OUTSIDE_PRED_BLOCK, MANUAL_PRED_BLOCK, AUTOMATIC_PRED_BLOCK
 };
-struct current_it
+enum pred_type {
+  SCALAR_PRED, VECTOR_PRED
+};
+struct current_pred
 {
   int mask;
-  enum it_state state;
+  enum pred_state state;
   int cc;
   int block_length;
   char *insn;
   int state_handled;
   int warn_deprecated;
   int insn_cond;
+  enum pred_type type;
 };
 
 #ifdef OBJ_ELF
@@ -320,7 +307,7 @@ struct arm_segment_info_type
      emitted only once per section, to save unnecessary bloat.  */
   unsigned int marked_pr_dependency;
 
-  struct current_it current_it;
+  struct current_pred current_pred;
 };
 
 /* We want .cfi_* pseudo-ops for generating unwind info.  */
@@ -353,7 +340,6 @@ struct arm_segment_info_type
 
 #define MD_PCREL_FROM_SECTION(F,S) md_pcrel_from_section(F,S)
 
-extern long md_pcrel_from_section (struct fix *, segT);
 extern void arm_frag_align_code (int, int);
 extern void arm_validate_fix (struct fix *);
 extern const char * elf32_arm_target_format (void);
@@ -398,3 +384,7 @@ extern char arm_line_separator_chars[];
 
 #define TC_EQUAL_IN_INSN(c, s) arm_tc_equal_in_insn ((c), (s))
 extern bfd_boolean arm_tc_equal_in_insn (int, char *);
+
+#define TC_LARGEST_EXPONENT_IS_NORMAL(PRECISION) \
+       arm_is_largest_exponent_ok ((PRECISION))
+int arm_is_largest_exponent_ok (int precision);